Schüler, die eine neue Programmiersprache lernen, beginnen ihre erste Unterrichtsstunde oft mit einem IF
-Anweisung, wobei ihre Anweisung nur dann einen Wert zurückgibt, wenn der Ausdruck wahr ist.
Sie könnten dann zu einem IF... ELSE
fortschreiten -Anweisung, in der sie einen anderen Wert bestimmen können, der zurückgegeben wird, wenn der Ausdruck falsch ist. Geben Sie daher einen Wert zurück, wenn der Ausdruck wahr ist, und einen anderen Wert, wenn er falsch ist.
SQL Server enthält natürlich den IF... ELSE
-Anweisung in seiner T-SQL-Toolbox.
SQL Server enthält auch das IIF()
Funktion, die etwas Ähnliches macht, aber mit einer prägnanteren Syntax.
Aber es gibt einige subtile Unterschiede.
Die Unterschiede
Die folgende Tabelle zeigt die Hauptunterschiede zwischen IF
-Anweisung und die IIF()
Funktion.
IF | IIF() | |
---|---|---|
Typ | Flusssteuerungsanweisung. | Logische Funktion. |
Wie wird das Ergebnis ermittelt? | Sie geben eine auszuführende SQL-Anweisung oder einen Anweisungsblock an. | Sie geben den eigentlichen Wert an, der zurückgegeben werden soll. |
Verschachtelung? | Die Begrenzung der Anzahl verschachtelter Ebenen hängt vom verfügbaren Speicher ab. | Kann nur bis zur maximalen Ebene von 10 verschachtelt werden. |
Was ist, wenn der Ausdruck falsch zurückgibt? | Das ELSE Schlüsselwort ist optional (d. h. Sie können wählen, ob falsche Ergebnisse berücksichtigt werden sollen oder nicht). | Erfordert sowohl einen wahren als auch einen falschen Wert (d. h. Sie müssen falsche Ergebnisse berücksichtigen). |
Das IIF()
Funktion ist eigentlich eine Kurzform zum Schreiben eines CASE
Ausdruck. Es teilt daher die gleichen Beschränkungen wie CASE
Ausdruck, die sich von IF
unterscheiden Aussage.
Die IF-Anweisung
Hier ist ein IF
Aussage.
IF 1 < 2 SELECT 'True';
Ergebnis:
True
In diesem Fall ist der auszuwertende Ausdruck 1 < 2
. Es stimmt, dass 1 kleiner als 2 ist, also SELECT
Anweisung ausgeführt wurde und True
ist wurde zurückgegeben.
Wenn der Ausdruck jedoch falsch ist, wird nichts passieren.
IF 1 > 2 SELECT 'True';
Ergebnis:
Commands completed successfully.
Alles, was SQL Server mir gesagt hat, ist, dass der Befehl erfolgreich abgeschlossen wurde. Es wurde nichts anderes zurückgegeben, da nichts anderes angegeben wurde.
Die IF… ELSE-Anweisung
In diesem Fall können wir den optionalen ELSE
hinzufügen zum IF
-Anweisung, sodass daraus ein IF... ELSE
wird Aussage.
IF 1 > 2
SELECT 'True';
ELSE
SELECT 'False';
Ergebnis:
False
Jetzt erhalten wir auch ein Ergebnis, wenn der Ausdruck falsch ist.
Die IIF()-Funktion
Das IIF()
-Funktion ermöglicht es uns, dieselbe Logik mit einer kürzeren Syntax zu schreiben.
Wir könnten daher das vorherige Beispiel wie folgt umschreiben:
SELECT IIF( 1 > 2, 'True', 'False' );
Ergebnis:
False
Das IIF()
Funktion ist im Grunde eine prägnantere Art, das IF... ELSE
auszuführen Erklärung.
Eigentlich stimmt das nur teilweise. Wie bereits erwähnt, das IIF()
Funktion basiert auf dem CASE
-Ausdruck und hat daher die gleichen Einschränkungen wie CASE
Ausdruck (z. B. nur bis zu einer maximalen Ebene von 10 verschachteln können).
Daher ist die vorherige Anweisung das Äquivalent der folgenden.
SELECT
CASE WHEN 1 > 2 THEN 'True'
ELSE 'False'
END;
Ergebnis:
False
Beachten Sie, dass IIF()
erfordert zwei Argumente, und daher müssen Sie einen Wert angeben, der zurückgegeben werden soll, wenn der Ausdruck falsch ist (selbst wenn Sie NULL
angeben). oder eine leere Zeichenfolge).