2017-03-27 10 views
2

Kann jemand ein Problem mit diesem Fall bei der Aussage feststellen? SQL Server scheint es nicht zu mögen und ich kann das Problem nicht erkennen!SQL-Problem - CASE WHEN

SELECT CASE @Next_Insp_Date 
    WHEN @Purpose_ID = 1 THEN DATEADD(m, 6, GETDATE()) AS @Next_Insp_Date 
    WHEN @Purpose_ID = 2 THEN DATEADD(m, 12, GETDATE()) AS @Next_Insp_Date 
    ELSE @Next_Insp_Date 
END AS @Next_Insp_Date 
+0

Es gibt viele Probleme mit dieser Case-Anweisung ... Ich bin mir nicht sicher, wo ich anfangen soll. –

+0

Haben Sie die Dokumentation des Falles nachgeschlagen? Und haben Sie sich ein Beispiel angesehen? – GuidoG

Antwort

4

A case-Anweisung nur ein alias haben. Versuchen Sie wie folgt aus:

SELECT CASE 
    WHEN @Purpose_ID = 1 THEN DATEADD(m, 6, GETDATE()) 
    WHEN @Purpose_ID = 2 THEN DATEADD(m, 12, GETDATE()) 
    ELSE --some other value here 
END AS Some_alias_name -- here it is the alias 

Ich weiß nicht, was @Next_Insp_Date aber sicher hält es an der falschen Stelle ist. In der else-Anweisung sollten Sie einen weiteren Wert haben

Wenn Sie den Wert von @Next_Insp_Date abrufen möchten, dann sollte es in der Else-Anweisung gehen.

+0

nicht sicher, dass dies mit diesem Alias ​​kompiliert wird – GuidoG

+0

@GuidoG ja, deshalb habe ich diesen letzten Satz hinzugefügt. Ich werde diese Variable aus der Abfrage entfernen. –

+1

Das war, was ich suchte, baute es bei dieser Gelegenheit falsch. Danke Jorge! – James

3
SELECT CASE @Purpose_ID 
    WHEN 1 THEN DATEADD(m, 6, GETDATE()) 
    WHEN 2 THEN DATEADD(m, 12, GETDATE()) 
    ELSE @Next_Insp_Date 
END 

nicht sicher, was die Absicht AS @Next_Insp_Date ist, gehört der Alias ​​nach dem END wenn man einen braucht.

1

Ihr Spaltenalias ist @Next_Insp_Date, das kann nicht sein, wenn Sie es nicht angeben. Sie wollten es wahrscheinlich Next_Insp_Date nennen.

Auch mischen Sie die beiden CASE Arten von CASE @val when 1 then und CASE WHEN @val = 1 then

SELECT CASE 
    WHEN @Purpose_ID = 1 THEN DATEADD(m, 6, GETDATE()) 
    WHEN @Purpose_ID = 2 THEN DATEADD(m, 12, GETDATE()) 
    ELSE @Next_Insp_Date 
END AS [Next_Insp_Date] 
0

deklarieren @Next_Insp_Date datetime = getdate(); deklarieren @Purpose_ID int = 3;

SELECT @Next_Insp_Date = CASE WHEN @Purpose_ID = 1 THEN DATEADD (m, 6, GETDATE()) WHEN @Purpose_ID = 2 THEN DATEADD (m, 12, GETDATE()) ELSE @Next_Insp_Date END print @ Nächster_Insp_Datum;

+0

Hallo, wenn Sie einen Code als Antwort (oder sogar eine Frage) hinzufügen, formatieren Sie es bitte. Sie müssen nur vier Leerzeichen vor jeder Codezeile hinzufügen. Ich habe es diesmal gemacht. Du bist auf, in der nächsten! –