Wie mehrere Werte in einer if-else-Anweisung?
Ich versuche mehr als einen Wert innerhalb der if-else-Anweisung unten, Wenn ich einen Wert, den es funktioniert, aber wenn ich zwei Werte festgelegt werden, es funktioniert nicht:
DECLARE @test1 varchar(60);
DECLARE @test2 varchar(60);
IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
SET @test1 = 'test1'
SET @test2 = 'test2'
ELSE
SET @test1 = 'testelse'
SET @test2 = 'testelse'
Fehlermeldung: "Msg 156, Level 15, Status 1, Zeile 9
Falsche syntax bei das Schlüsselwort 'ELSE'."
Allerdings scheint es möglich zu sein, mehrere Variablen FESTLEGEN nach dem anderen; dieser code funktioniert:
IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
SET @test1 = 'test1'
ELSE
SET @test1 = 'testelse'
SET @test2 = 'testelse'
Wie mache ich das richtig?
- Verwenden Sie die
BEGIN .. END
Konstrukt zusammenfassen mehrerer Anweisungen. (msdn.microsoft.com/en-us/library/ms190487.aspx)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn du mehr als eine Anweisung in eine if-Bedingung verwenden, müssen Sie die
BEGIN ... END
block zu Kapseln, Sie.Verwenden
BEGIN
undEND
zu markieren, eine multi-statement-block-code, wie mit{
und}
in anderen Sprachen, in denen Sie können Ihre mehrereSET
Aussagen...Oder verwenden Sie
SELECT
Werte zuweisen Ihre Variablen, so dass beide zugeordnet werden, in einer einzigen Anweisung und so vermeiden, dass die Verwendung vonBEGIN
undEND
.Wenn Sie mehrere Anweisungen nach der
IF
verwenden Siebegin
undend
(ähnlich wie Auszeichnungen in c#, zum Beispiel).Das Verhalten macht Sinn, die seit Ihrem ersten Versuch aufgeteilt wird so:
sowie
ELSE
fehl, da es sich nicht gehören zu jeder IF-Anweisung.In Erwägung ziehen wie diese:
Den zweiten Ausdruck in deiner Frage wird immer ausgeführt @test2 = 'testelse', weil das SONST endet gleich nach dem ersten Ausdruck nach dem anderen:
Wenn Sie mehrere Ausdrücke innerhalb der WENN, Sie können immer die Gruppe der Ausdrücke mit BEGIN /END.
Aber in deinem Fall der einfachste Weg wäre dieser: