Elever som lär sig ett nytt programmeringsspråk börjar ofta sin första lektion med en IF
sats, där deras sats returnerar ett värde endast om uttrycket är sant.
De kan sedan gå vidare till en IF... ELSE
sats, där de kan bestämma ett annat värde att returnera om uttrycket är falskt. Så därför, returnera ett värde om uttrycket är sant, och ett annat värde om det är falskt.
SQL Server innehåller verkligen IF... ELSE
uttalande i sin T-SQL-verktygslåda.
SQL Server inkluderar även IIF()
funktion, som gör en liknande sak, men med en mer kortfattad syntax.
Men det finns några subtila skillnader.
Skillnaderna
Följande tabell beskriver de huvudsakliga skillnaderna mellan IF
satsen och IIF()
funktion.
IF | IIF() | |
---|---|---|
Typ | Flödeskontrollsats. | Logisk funktion. |
Hur bestäms resultatet? | Du anger en SQL-sats eller ett satsblock som ska köras. | Du anger det faktiska värdet som ska returneras. |
Inkapslar? | Gränsen för antalet kapslade nivåer beror på tillgängligt minne. | Kan bara kapslas upp till maxnivån 10. |
Vad händer om uttrycket returnerar falskt? | ELSE sökordet är valfritt (dvs. du kan välja om du vill ta hänsyn till falska resultat eller inte). | Kräver både ett sant och ett falskt värde (dvs. du måste ta hänsyn till falska resultat). |
IIF()
funktion är faktiskt en förkortning för att skriva ett CASE
uttryck. Den delar därför samma begränsningar som CASE
uttryck, som skiljer sig från IF
uttalande.
IF-utlåtandet
Här är en IF
uttalande.
IF 1 < 2 SELECT 'True';
Resultat:
True
I det här fallet är uttrycket som ska utvärderas 1 < 2
. Det är sant att 1 är mindre än 2 så SELECT
uttalandet kördes och True
returnerades.
Men om uttrycket är falskt kommer ingenting att hända.
IF 1 > 2 SELECT 'True';
Resultat:
Commands completed successfully.
Allt SQL Server sa till mig är att kommandot slutfördes framgångsrikt. Inget annat returnerades, eftersom inget annat var specificerat.
OM... ANNAT uttalande
I det här fallet kan vi lägga till den valfria ELSE
till IF
sats, så att den blir en IF... ELSE
uttalande.
IF 1 > 2
SELECT 'True';
ELSE
SELECT 'False';
Resultat:
False
Nu får vi också ett resultat när uttrycket är falskt.
IIF()-funktionen
IIF()
funktionen låter oss skriva samma logik med en mer koncis syntax.
Vi skulle därför kunna skriva om det föregående exemplet till följande:
SELECT IIF( 1 > 2, 'True', 'False' );
Resultat:
False
IIF()
funktion är i grunden ett mer kortfattat sätt att göra IF... ELSE
påstående.
Egentligen är det bara delvis sant. Som nämnts, IIF()
funktionen är baserad på CASE
uttryck och har därför samma begränsningar som CASE
uttryck (som att bara kunna kapsla till en maximal nivå av 10).
Därför motsvarar det föregående påståendet följande.
SELECT
CASE WHEN 1 > 2 THEN 'True'
ELSE 'False'
END;
Resultat:
False
Observera att IIF()
kräver två argument, och därför måste du ange ett värde som ska returneras om uttrycket blir falskt (även om du anger NULL
eller en tom sträng).