IIF'SQL Server 2014错误语法附近'错误

时间:2015-07-27 09:33:44

标签: sql sql-server-2014 iif

我正在尝试按月使用此脚本进行日期控制

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

SELECT
    MONTH(@controlDate),
    MONTH(DATEADD(MONTH, -@MonthCount, @Date)),
    IIF(MONTH(@controlDate) > MONTH(DATEADD(MONTH, -@MonthCount, @Date)),'OK','No') as isOK     

但我收到此语法错误:

  

Msg 102,Level 15,State 1,Line 8'>'

附近的语法不正确

enter image description here

编辑: 当我尝试if时,它正在运作:

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

if(MONTH(@controlDate) > MONTH(DATEADD(MONTH, -@MonthCount, @Date)))
print 'OK'
else
print 'No'

我做错了什么或这是一个错误?

3 个答案:

答案 0 :(得分:4)

如果您没有在正确版本的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

答案 1 :(得分:1)

它应该正常工作。您也可以使用CASE表达式

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

SELECT
    MONTH(@controlDate),
    MONTH(DATEADD(MONTH, -@MonthCount, @Date)),
    case when MONTH(@controlDate) > 
    MONTH(DATEADD(MONTH, -@MonthCount, @Date)) then 'OK' else 'No' end as isOK  

答案 2 :(得分:0)

我遇到了同样的问题,因为SQL Server 2012中引入了<span class="jellyYellow0001 sprite"></span>,但我的客户端使用了2008R2。请改为使用IIFSQL Server 2008 IIF statement does not seem enabled