Elever, der lærer et nyt programmeringssprog, starter ofte deres første lektion med en IF
sætning, hvor deres sætning kun vil returnere en værdi, hvis udtrykket er sandt.
De kan derefter gå videre til en IF... ELSE
sætning, hvor de kan bestemme en anden værdi, der skal returneres, hvis udtrykket er falsk. Så returner derfor én værdi, hvis udtrykket er sandt, og en anden værdi, hvis det er falsk.
SQL Server inkluderer bestemt IF... ELSE
sætning i sin T-SQL-værktøjskasse.
SQL Server inkluderer også IIF()
funktion, som gør noget lignende, men med en mere kortfattet syntaks.
Men der er nogle subtile forskelle.
Forskellene
Følgende tabel skitserer de vigtigste forskelle mellem IF
sætning og IIF()
funktion.
IF | IIF() | |
---|---|---|
Type | Flowkontrolerklæring. | Logisk funktion. |
Hvordan bestemmes resultatet? | Du angiver en SQL-sætning eller sætningsblok, der skal udføres. | Du angiver den faktiske værdi, der skal returneres. |
Indlejrer? | Grænsen for antallet af indlejrede niveauer afhænger af tilgængelig hukommelse. | Kan kun indlejres op til det maksimale niveau på 10. |
Hvad hvis udtrykket returnerer falsk? | ELSE søgeord er valgfrit (dvs. du kan vælge, om du vil tage højde for falske resultater eller ej). | Kræver både en sand og en falsk værdi (dvs. du skal tage højde for falske resultater). |
IIF()
funktion er faktisk en kortfattet måde at skrive en CASE
på udtryk. Den deler derfor de samme begrænsninger som CASE
udtryk, som er forskellige fra IF
erklæring.
Hvis erklæringen
Her er en IF
erklæring.
IF 1 < 2 SELECT 'True';
Resultat:
True
I dette tilfælde er udtrykket, der skal evalueres, 1 < 2
. Det er rigtigt, at 1 er mindre end 2, så SELECT
sætningen blev kørt og True
blev returneret.
Men hvis udtrykket er falsk, vil der ikke ske noget.
IF 1 > 2 SELECT 'True';
Resultat:
Commands completed successfully.
Alt, hvad SQL Server fortalte mig, er, at kommandoen blev gennemført med succes. Intet andet blev returneret, fordi intet andet var angivet.
HVIS… ELSE-erklæringen
I dette tilfælde kan vi tilføje den valgfrie ELSE
til IF
sætning, så den bliver en IF... ELSE
erklæring.
IF 1 > 2
SELECT 'True';
ELSE
SELECT 'False';
Resultat:
False
Nu får vi også et resultat, når udtrykket er falsk.
IIF()-funktionen
IIF()
funktion giver os mulighed for at skrive den samme logik ved hjælp af en mere kortfattet syntaks.
Vi kunne derfor omskrive det foregående eksempel til følgende:
SELECT IIF( 1 > 2, 'True', 'False' );
Resultat:
False
IIF()
funktion er grundlæggende en mere kortfattet måde at udføre IF... ELSE
på udmelding.
Faktisk er det kun delvist sandt. Som nævnt er IIF()
funktionen er baseret på CASE
udtryk og har derfor de samme begrænsninger som CASE
udtryk (såsom kun at kunne indlejre til et maksimalt niveau på 10).
Derfor svarer det foregående udsagn til det følgende.
SELECT
CASE WHEN 1 > 2 THEN 'True'
ELSE 'False'
END;
Resultat:
False
Bemærk, at IIF()
kræver to argumenter, og derfor skal du angive en værdi, der skal returneres, hvis udtrykket resulterer i falsk (selvom du angiver NULL
eller en tom streng).