2017-01-24 20 views
2

Этот код:Неверный синтаксис рядом с порядком. Запуск Total. SQL Server 2012

select 
    AccountCode.AccountCodeID, 
    sum(AccountCode.AccountCodeID) Over (order by AccountCodeID) as RunningTotal 
from 
    AccountCode 

причины это сообщение об ошибке:

Msg 102, Level 15, State 1, Line 2
Неправильный синтаксис около 'порядок'.

на SQL Server 2012. Рекомендации оценены.

ответ

3

Синтаксис кажется нормально - так должен работать против SQL Server 2012.

Там две возможности, которые она до сих пор не действует:

  • вы бегаете SQL Server 2012 Management Studio, но против старого SQL Server двигатель версия - вы можете проверить это, выполнив:

    SELECT @@VERSION 
    
  • Вы работаете с базой данных, которая имеет уровень совместимости и, таким образом, не поддерживает функции SQL Server 2012, такие как оконная функция OVER (ORDER BY...).

    Узнайте, запустив это против вашей базы данных:

    SELECT name, compatibility_level 
    FROM sys.databases 
    WHERE database_id = DB_ID() 
    

    Уровень совместимости должен быть для SQL Server 2012 - если это ниже, что вы можете изменить это.

Update:, так как вы определили, что уровень совместимости этой базы данных (= SQL Server 2000), вам необходимо изменить, что в более поздней версии. Для того, чтобы обновить базу данных с уровнем совместимости (SQL Server 2008 R2), который должен поддерживать эти функции окна, используйте следующую команду:

ALTER DATABASE (YourDatabaseName) 
SET COMPATIBILITY_LEVEL = 105; 

и вы сделали. Теперь ваш запрос должен работать нормально.

+1

У меня нет экземпляра 2012 года, но он подтвердил, что это отлично работает на SQL 2014 (12.0.4213.0), если 'AccountCodeID' является столбцом' INT', как я предполагал. +1 – 3N1GM4

+0

Я побежал SELECT @@ VERSION и получил Microsoft SQL Server 2008 R2 (SP2) - 10.50.4033.0 (X64) \t Jul 9 2014 16:04:25 \t Copyright (C) Microsoft Corporation \t Enterprise Edition (64 -бит) в Windows NT 6.1 (сборка 7601: с пакетом обновления 1), но когда я перехожу к «О», логотип является SQL Server 2012. Второй qry дает уровень совместимости 80 –

+1

@DasalKalubowila: уровень совместимости ** 80 ** - это SQL Сервер ** 2000 **, который ** определенно ** не поддерживал эти функции окна! Обновите уровень совместимости вашей базы данных до 100 для SQL Server 2008, и он должен работать. –