sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server IF vs IIF():Vad är skillnaden?

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


  1. Returnera antalet rader som påverkas av UPDATE-satser

  2. Guide till designdatabas för online kundvagn i MySQL

  3. Är det möjligt att fråga en kommaseparerad kolumn för ett specifikt värde?

  4. SQL Server Error - HRESULT E_FAIL har returnerats från ett anrop till en COM-komponent