2010-12-07 76 views
6

IIF語句是否存在於所有版本的SQL Server中?SQL Server 2005中的IIF語句

我檢查了MSDN的教程。

但是,當我試圖在我的機器

DECLARE @newDate datetime 
SET @newDate = CONVERT(varchar, {fn NOW()}, 111) 
SELECT IIF(@newDate > '2010/12/2', 'Greater', 'smaller') 

上運行此代碼,但我得到的錯誤「附近有語法錯誤‘>’。」

有人可以提供我在SQL Server 2005中的例子是否存在IIF語句?

回答

11

IIF說法只存在於MDX - 用於SQL Server 分析服務的查詢語言 - SQL服務器的datawarehousing側。

普通T-SQL確實不是有一個IIF聲明。

您可以在T-SQL中執行的最佳操作是使用CASE.... WHEN... THEN...語句。

+3

更新:SQL Server 2012現在有一個IIF聲明。 http://msdn.microsoft.com/en-us/library/hh213574.aspx – Somantra 2012-06-13 18:19:31

+0

@Somantra:true - 但在2010年12月還沒有人知道,並且OP在詢問SQL Server 2005. – 2012-06-13 18:20:19

6

你最好使用CASE表達:

DECLARE @newDate datetime 
SET @newDate = CONVERT(varchar, {fn NOW()}, 111) 
SELECT CASE WHEN @newDate > '20101202' THEN 'Greater' ELSE 'smaller' END 

還請注意,我已經關掉你的日期文字到一個安全的格式 - 「2010/12/2」可以通過SQL服務器進行解釋無論是12月12日還是12月2日。

-1
IIF([Add DVP Month].DevelopmentMonth>[Add DVP Month].COVMONTHS, 
     1, 
    IIF([STATUS]<>'1', 
     1, 
    IIF([Add DVP Month].PLANTYPE = 'A' and [Add DVP Month].newUsedProgram = 'U' and [Add DVP Month].COVMONTHS = 60 and [Add DVP Month].COVMILES = 100000 and [Add DVP Month].postedDt >= #1/31/2010#, 
    IIF([Add DVP Month].postedDt >= #1/31/2012#, 
     [EPMthd.PCM2], 
    IIF([Add DVP Month].postedDt >= #1/31/2010#, 
    [EPMthd.PCM1], 
    [EPMthd.PCM0]) 
    ), 
    IIF([Add DVP Month].COVMONTHS = 999,[EPMthd.2], 
    IIF([Add DVP Month].postedDt >= #1/31/2012#, [EPMthd.2], 
    IIF([Add DVP Month].postedDt >= #1/31/2010#, [EPMthd.1], 
    IIF([Add DVP Month].postedDt >= #1/31/2008#, 
    IIF([EPMthd.0] is null, 
     [EPMthd.8], 
     [EPMthd.0] 
    ), 
    IIF([Add DVP Month].postedDt < #1/31/2008#, 
    IIF([EPMthd.8] is null, 
    IIF([Add DVP Month].COVMONTHS = 0,0, 
     [Add DVP Month].DevelopmentMonth/[Add DVP Month].COVMONTHS 
    ), 
     [EPMthd.8] 
    ), 
    IIF([Add DVP Month].COVMONTHS = 0, 
    0, 
     [Add DVP Month].DevelopmentMonth/[Add DVP Month].COVMONTHS 
    ) 
    ) 
)))))) 
) AS [EP%]