2015-07-27 3 views
3

Я пытаюсь контролировать дату в месяц с помощью этого сценарияIIF ошибки в SQL Server 2014

DECLARE @Date DATETIME = '2015-07-31'; 
DECLARE @MonthCount INT = 3; 
DECLARE @controlDate DATETIME = '2015-04-28'; 

SELECT 
    MONTH(@controlDate), 
    MONTH(DATEADD(MONTH, [email protected], @Date)), 
    IIF(MONTH(@controlDate) > MONTH(DATEADD(MONTH, [email protected], @Date)),'OK','No') as isOK  

Но я получаю эту ошибку синтаксиса:

Msg 102, Level 15, State 1, Line 8 Incorrect syntax near '>'

enter image description here

EDIT: Когда я попробую if, он работает:

DECLARE @Date DATETIME = '2015-07-31'; 
DECLARE @MonthCount INT = 3; 
DECLARE @controlDate DATETIME = '2015-04-28'; 

if(MONTH(@controlDate) > MONTH(DATEADD(MONTH, [email protected], @Date))) 
print 'OK' 
else 
print 'No' 

Что я делаю неправильно или это ошибка?

+0

Я считаю, что вам нужен синтаксис 'case' здесь: http://stackoverflow.com/a/63480/60188 –

+0

@AntonGogolev, но я не хочу использовать случай. IIF более прост. –

+2

@eMKey - Его работа здесь http://sqlfiddle.com/#!6/ffa43/4 –

ответ

3

Это происходит, когда вы не работаете на правильной версии SQL Server или если уровень совместимости базы данных не установлен достаточно.

Чтобы проверить уровень совместимости:

select compatibility_level 
from sys.databases 
where name = '<database name>' 

Чтобы изменить уровень совместимости:

alter database <database-name> 
set compatibility level = 110 -- SQL Server 2012 

Список уровней совместимости: https://msdn.microsoft.com/en-us/library/bb510680.aspx

+0

Мой уровень совместимости - 90. Что такое уровень совместимости для sql server 2014? –

+0

Кажется, что 120 - это значение для 2014 года, см. Ссылку в обновленном ответе. – thebjorn

+0

Я получаю ошибку для 120 => Допустимые значения уровня совместимости базы данных - 80, 90 или 100. –

0

Он должен работать правильно. Кроме того, можно использовать выражение: CASE

DECLARE @Date DATETIME = '2015-07-31'; 
DECLARE @MonthCount INT = 3; 
DECLARE @controlDate DATETIME = '2015-04-28'; 

SELECT 
    MONTH(@controlDate), 
    MONTH(DATEADD(MONTH, [email protected], @Date)), 
    case when MONTH(@controlDate) > 
    MONTH(DATEADD(MONTH, [email protected], @Date)) then 'OK' else 'No' end as isOK