sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server IF vs IIF():Hvad er forskellen?

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


  1. LOCALTIMESTAMP() Funktion i Oracle

  2. SQLite SUBSTRING() Forklaret

  3. Brug FILEGROUP_NAME() til at returnere navnet på en filgruppe i SQL Server

  4. Sådan installeres Oracle SQL Developer 18.2 på Windows 10?