Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server IF vs. IIF():Was ist der Unterschied?

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).