2010-12-07 14 views
6

Gibt es eine IIF-Anweisung in allen Versionen von SQL Server?IIF-Anweisung in SQL Server 2005

Ich habe ein Tutorial auf MSDN überprüft.

Aber als ich versuchte, diesen Code auf meinem Rechner

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

Aber ich bin immer Fehler „falsche Syntax in der Nähe‚>‘.“ Laufen

Kann mir jemand ein Beispiel in SQL Server 2005 für die Existenz der IIF-Anweisung bereitstellen?

Antwort

11

Das IIF Anweisung existiert nur in MDX - die Abfragesprache für SQL Server Analysis Services - die Data-Warehousing Seite von SQL Server.

Plain T-SQL tut nicht haben eine IIF Anweisung.

Das Beste, was Sie in T-SQL tun können, ist die CASE.... WHEN... THEN... Anweisung.

+3

AKTUALISIERUNG: SQL Server 2012 verfügt jetzt über eine IIF-Anweisung. http://msdn.microsoft.com/en-us/library/hh213574.aspx – Somantra

+0

@Somantra: True - aber das war nicht bekannt im Dezember 2010, und das OP fragte nach SQL Server 2005. –

+3

Der Titel sagt 2005, aber seine erste Frage fragte "Gibt es eine IIF-Anweisung in allen Versionen von SQL Server?". Hoffentlich findet jemand in diesem Post in Zukunft etwas Nützliches. ;-) – Somantra

6

Du bist besser dran mit einem CASE Ausdruck:

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

Bitte beachten Sie auch, dass ich Ihre Datumsliteral zu einem sicheren Format umgestellt haben - ‚2010.12.02‘ von SQL Server interpretiert werden könnte entweder am 12. Februar oder am 2. Dezember.

-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%] 
+1

Dies ist nur ein Müllposten. – nalply

+0

Zustimmen. Es ist nicht das, was gefragt wurde und völlig andere Syntax als SQL Server – Fandango68