it-swarm.com.de

Wie setze ich mehrere Werte in einer if-else-Anweisung?

Ich versuche, mehr als einen Wert in der if-Anweisung anzugeben, wenn ich einen Wert setze, funktioniert es, aber wenn ich zwei Werte setze, funktioniert es 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: "Nachricht 156, Ebene 15, Status 1, Zeile 9 
Falsche Syntax in der Nähe des Schlüsselworts "ELSE". "

Es scheint jedoch möglich zu sein, mehrere SET-Variablen hinter dem else zu haben; 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 kann ich das richtig machen?

17
mattias

Wenn Sie mehr als eine Anweisung in einer if-Bedingung haben, müssen Sie den BEGIN ... END-Block verwenden, um sie einzukapseln.

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
BEGIN
 SET @test1 = 'test1'
 SET @test2 = 'test2' 
END
ELSE
BEGIN
 SET @test1 = 'testelse'
 SET @test2 = 'testelse'
END
35
Abdul Rasheed

Verwenden Sie BEGIN und END, um einen aus mehreren Anweisungen bestehenden Codeblock zu markieren, ähnlich wie bei Verwendung von { und } in anderen Sprachen, in denen Sie mehrere SET-Anweisungen platzieren können.

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
BEGIN
    SET @test1 = 'test1'
    SET @test2 = 'test2'
END
ELSE
BEGIN
    SET @test1 = 'testelse'
    SET @test2 = 'testelse'
END

Oder verwenden Sie SELECT, um Ihren Variablen Werte zuzuweisen, sodass beide in einer einzelnen Anweisung zugewiesen werden können und vermeiden Sie die Verwendung von BEGIN und END.

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
    SELECT
        @test1 = 'test1',
        @test2 = 'test2' 
ELSE
    SELECT
        @test1 = 'testelse',
        @test2 = 'testelse'
5
MatBailie

Wenn Sie nach IF mehrere Anweisungen haben, müssen Sie begin und end verwenden (ähnlich wie beispielsweise Auszeichnungen in c #).

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
BEGIN
   SET @test1 = 'test1'
   SET @test2 = 'test2' 
END
ELSE
BEGIN
   SET @test1 = 'testelse'
   SET @test2 = 'testelse'
END
2
HoneyBadger

Das Verhalten ist sinnvoll, da Ihre erste Prüfung folgendermaßen aufgeteilt wird:

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
SET @test1 = 'test1'

SET @test2 = 'test2' 

ELSE
   SET @test1 = 'testelse'

und ELSE schlägt fehl, da sie keiner IF-Anweisung angehört.

Betrachten Sie so:

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
BEGIN
   SET @test1 = 'test1'
   SET @test2 = 'test2' 
END
ELSE
BEGIN 
   SET @test1 = 'testelse'
   SET @test2 = 'testelse'
END
1
Alexei

Der zweite Ausdruck in Ihrer Frage führt immer zum Ausführen von @ test2 = 'testelse' , da die ELSE direkt nach dem ersten Ausdruck nach dem else endet

IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
SET @test1 = 'test1'
ELSE
SET @test1 = 'testelse'
-- IF is done evaluating here
SET @test2 = 'testelse' 

Wenn Sie mehrere Ausdrücke in der IF haben, können Sie die Ausdrücke immer mit BEGIN/END gruppieren. 

In Ihrem Fall wäre dies jedoch der einfachste Weg:

IF (SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10
  SELECT @test1 = 'test1', @test2 = 'test2' 
ELSE
  SELECT @test1 = 'testelse', @test2 = 'testelse'
0
t-clausen.dk