SQL Server IF…ELSE-Bedingungsanweisung: T-SQL-Select-Beispiel
⚡ Intelligente Zusammenfassung
IF…ELSE ist eine Ablaufsteuerungsanweisung in SQL Server, die einen T-SQL-Block ausführt, wenn eine boolesche Bedingung als wahr ausgewertet wird, und optional einen alternativen Block, wenn dieselbe Bedingung als falsch ausgewertet wird.

Warum brauchen Sie bedingte Anweisungen?
Bedingte Anweisungen in SQL Server helfen Ihnen, unterschiedliche Logik und Aktionen für verschiedene Bedingungen zu definieren. Sie ermöglichen es Ihnen, je nach den in der Anweisung definierten Bedingungen unterschiedliche Aktionen auszuführen. Im Alltag führen Sie viele Aktionen aus, die vom Ergebnis einer anderen Aktivität oder Situation abhängen.
Einige Beispiele für bedingte Anweisungen in Echtzeit sind:
- Wenn es morgen regnet, plane ich einen Roadtrip.
- Wenn die Flugtickets von meiner Stadt aus weniger als 400 Dollar kosten, werde ich Urlaub in Europa machen; andernfalls bevorzuge ich einen nahegelegenen Touristenort.
Hier sieht man, dass eine Handlung, wie die oben erwähnte Autoreise, bedingt vom Ergebnis einer anderen Handlung abhängt, nämlich ob es morgen regnet oder nicht. Ähnlich verhält es sich mit MS. SQL Server bietet außerdem die Möglichkeit, eine T-SQL-Anweisung bedingt auszuführen.
IF…ELSE-Anweisung in SQL Server
In MS SQL ist IF…ELSE eine Art bedingter Anweisung. Jede T-SQL-Anweisung kann mithilfe von IF…ELSE bedingt ausgeführt werden. Die folgende Abbildung veranschaulicht die Funktionsweise der IF- und ELSE-Zweige in SQL Server:
- Wenn die Bedingung als wahr ausgewertet wird, werden die T-SQL-Anweisungen ausgeführt, die in SQL Server auf die IF-Bedingung folgen.
- Wenn die Bedingung als FALSCH ausgewertet wird, werden die T-SQL-Anweisungen ausgeführt, die auf das Schlüsselwort ELSE folgen.
- Sobald entweder die IF T-SQL-Anweisung oder die ELSE T-SQL-Anweisung ausgeführt wurde, wird die Ausführung der anderen unbedingten T-SQL-Anweisungen fortgesetzt.
IF…ELSE-Syntax und Regeln in SQL
Syntax:
IF <Condition> {Statement | Block_of_statement} [ ELSE {Statement | Block_of_statement}]
Regeln:
- Die Bedingung sollte ein boolescher Ausdruck sein, d.h. die Bedingung muss bei ihrer Auswertung einen booleschen Wert ergeben.
- Eine IF…ELSE-Anweisung in SQL kann bedingt eine einzelne T-SQL-Anweisung oder einen Block von T-SQL-Anweisungen verarbeiten.
- Ein Block von Anweisungen sollte mit dem Schlüsselwort BEGIN beginnen und mit dem Schlüsselwort END enden.
- Die Verwendung von BEGIN und END hilft SQL Server dabei, den auszuführenden Anweisungsblock zu identifizieren und ihn von den übrigen T-SQL-Anweisungen zu trennen, die nicht Teil des IF…ELSE T-SQL-Blocks sind.
- ELSE ist optional.
IF…ELSE-Anweisung mit nur einem numerischen Wert im booleschen Ausdruck
Im ersten Beispiel verwendet der boolesche Ausdruck ausschließlich numerische Werte. Betrachten Sie die folgende Bedingung, die immer wahr ist, da 1 gleich 1 ist.
Bedingung: WAHR
IF (1=1) PRINT 'IF STATEMENT: CONDITION IS TRUE' ELSE PRINT 'ELSE STATEMENT: CONDITION IS FALSE'
Die Ausführung der Abfrage mit der Bedingung „wahr“ (1=1) gibt die Meldung des IF-Zweigs aus:
Zustand: FALSCH
IF (1=2) PRINT 'IF STATEMENT: CONDITION IS TRUE' ELSE PRINT 'ELSE STATEMENT: CONDITION IS FALSE'
Bei der falschen Bedingung (1=2) wird stattdessen der ELSE-Zweig ausgeführt:
Angenommen, Sie haben eine Tabelle mit dem Namen 'Guru99' mit zwei Spalten und vier Zeilen, wie unten dargestellt. Wir werden dieses 'GuruTabelle 99 in den folgenden Beispielen.
IF…ELSE mit einer Variablen in einem booleschen Ausdruck
Anstelle von konstanten Zahlen kann der boolesche Ausdruck vergleichen VariableDas folgende Beispiel deklariert eine Integer-Variable und prüft ihren Wert.
Bedingung: WAHR
DECLARE @Course_ID INT = 4 IF (@Course_ID = 4) Select * from Guru99 where Tutorial_ID = 4 ELSE Select * from Guru99 where Tutorial_ID != 4
Da @Course_ID gleich 4 ist, wird der IF-Zweig ausgeführt und gibt die Zeile zurück, in der Tutorial_ID gleich 4 ist:
Zustand: FALSCH
DECLARE @Course_ID INT = 4 IF (@Course_ID != 4) Select * from Guru99 where Tutorial_ID = 4 ELSE Select * from Guru99 where Tutorial_ID != 4
Hier ist die Bedingung falsch, daher wird der ELSE-Zweig ausgeführt und gibt jede Zeile zurück, in der Tutorial_ID nicht 4 ist:
WENN…SONST mit BEGINN…ENDE
Wenn ein Zweig mehrere Anweisungen ausführen muss, schließen Sie die Anweisungen in einen BEGIN…END-Block ein. Das folgende Beispiel führt in jedem Zweig zwei SELECT-Anweisungen aus.
Bedingung: WAHR
DECLARE @Course_ID INT = 2 IF (@Course_ID <=2) BEGIN Select * from Guru99 where Tutorial_ID = 1 Select * from Guru99 where Tutorial_ID = 2 END ELSE BEGIN Select * from Guru99 where Tutorial_ID = 3 Select * from Guru99 where Tutorial_ID = 4 END
Da @Course_ID kleiner oder gleich 2 ist, werden im IF-Block beide SELECT-Anweisungen innerhalb von BEGIN…END ausgeführt:
Zustand: FALSCH
DECLARE @Course_ID INT = 2 IF (@Course_ID >=3) BEGIN Select * from Guru99 where Tutorial_ID = 1 Select * from Guru99 where Tutorial_ID = 2 END ELSE BEGIN Select * from Guru99 where Tutorial_ID = 3 Select * from Guru99 where Tutorial_ID = 4 END
Diesmal ist die Bedingung falsch, daher führt der ELSE-Block seine beiden SELECT-Anweisungen aus:
IF-Anweisung ohne ELSE
In SQL kann eine IF-Anweisung auch ohne ELSE-Zweig verwendet werden, da der ELSE-Zweig optional ist. Zum Beispiel:
DECLARE @Course_ID INT = 2 IF (@Course_ID <=2) Select * from Guru99 where Tutorial_ID = 1
Es wird die folgende einzelne Zeile ausgegeben:
Die Ausführung der Bedingung „falsch“ liefert keine Ausgabe. Betrachten Sie die folgende Abfrage:
DECLARE @Course_ID INT = 2 IF (@Course_ID <=0) Select * from Guru99 where Tutorial_ID = 1
Das Ergebnis ist leer, wie unten dargestellt:
Verschachtelte IF…ELSE-Anweisungen
Im Gegensatz zu anderen ProgrammiersprachenSQL Server bietet keine ELSE IF-Anweisung innerhalb einer IF…ELSE-Bedingung. Stattdessen können Sie eine IF…ELSE-Anweisung in eine andere verschachteln, wie unten gezeigt:
DECLARE @age INT; SET @age = 60; IF @age < 18 PRINT 'underage'; ELSE BEGIN IF @age < 50 PRINT 'You are below 50'; ELSE PRINT 'Senior'; END;
Bei einem @age von 60 liefert die verschachtelte IF…ELSE-Anweisung folgendes Ergebnis:
- Der Code gibt „unter 18“ aus, wenn der Wert von @age unter 18 liegt.
- Andernfalls wird der ELSE-Zweig ausgeführt. Der ELSE-Zweig enthält eine verschachtelte IF…ELSE-Anweisung.
- Wenn der Wert von @age unter 50 liegt, wird „Sie sind unter 50“ ausgegeben. Trifft keine dieser Bedingungen zu, gibt der Code „Senior“ aus.











