Studenten die een nieuwe programmeertaal leren, beginnen hun eerste les vaak met een IF
statement, waarbij hun statement alleen een waarde retourneert als de expressie waar is.
Ze kunnen dan doorgaan naar een IF... ELSE
statement, waar ze een andere waarde kunnen bepalen die moet worden geretourneerd als de expressie onwaar is. Retourneer daarom één waarde als de uitdrukking waar is, en een andere waarde als deze niet waar is.
SQL Server bevat zeker de IF... ELSE
statement in zijn T-SQL-toolbox.
SQL Server bevat ook de IIF()
functie, die hetzelfde doet, maar met een beknoptere syntaxis.
Maar er zijn enkele subtiele verschillen.
De verschillen
De volgende tabel geeft een overzicht van de belangrijkste verschillen tussen de IF
statement en de IIF()
functie.
IF | IIF() | |
---|---|---|
Type | Flow control statement. | Logische functie. |
Hoe wordt het resultaat bepaald? | U specificeert een SQL-instructie of instructieblok om uit te voeren. | U specificeert de werkelijke waarde die moet worden geretourneerd. |
Nesten? | De limiet voor het aantal geneste niveaus hangt af van het beschikbare geheugen. | Kan alleen worden genest tot het maximale niveau van 10. |
Wat als de expressie false retourneert? | De ELSE zoekwoord is optioneel (d.w.z. u kunt kiezen of u al dan niet rekening houdt met valse resultaten). | Vereist zowel een true als een false waarde (d.w.z. u moet rekening houden met valse resultaten). |
De IIF()
functie is eigenlijk een verkorte manier voor het schrijven van een CASE
uitdrukking. Het deelt daarom dezelfde beperkingen als de CASE
expressie, die verschillen van de IF
verklaring.
De IF-verklaring
Hier is een IF
verklaring.
IF 1 < 2 SELECT 'True';
Resultaat:
True
In dit geval is de te evalueren uitdrukking 1 < 2
. Het is waar dat 1 kleiner is dan 2, dus de SELECT
statement is uitgevoerd en True
is teruggestuurd.
Als de uitdrukking echter onwaar is, gebeurt er niets.
IF 1 > 2 SELECT 'True';
Resultaat:
Commands completed successfully.
Alles wat SQL Server me vertelde, is dat de opdracht met succes is voltooid. Er is niets anders geretourneerd, omdat er niets anders is opgegeven.
De IF... ELSE-verklaring
In dit geval kunnen we de optionele ELSE
. toevoegen naar de IF
statement, zodat het een IF... ELSE
. wordt verklaring.
IF 1 > 2
SELECT 'True';
ELSE
SELECT 'False';
Resultaat:
False
Nu krijgen we ook een resultaat als de uitdrukking onwaar is.
De IIF()-functie
De IIF()
functie stelt ons in staat om dezelfde logica te schrijven met een beknoptere syntaxis.
We kunnen daarom het vorige voorbeeld herschrijven tot het volgende:
SELECT IIF( 1 > 2, 'True', 'False' );
Resultaat:
False
De IIF()
functie is in feite een meer beknopte manier om de IF... ELSE
uitspraak.
Eigenlijk is dat maar gedeeltelijk waar. Zoals gezegd, de IIF()
functie is gebaseerd op de CASE
expressie, en heeft daarom dezelfde beperkingen als de CASE
expressie (zoals alleen kunnen nesten tot een maximum van 10).
Daarom is de vorige verklaring het equivalent van de volgende.
SELECT
CASE WHEN 1 > 2 THEN 'True'
ELSE 'False'
END;
Resultaat:
False
Merk op dat IIF()
vereist twee argumenten en daarom moet u een waarde opgeven die moet worden geretourneerd als de uitdrukking op false resulteert (zelfs als u NULL
opgeeft of een lege string).