sql >> Database >  >> RDS >> Sqlserver

SQL Server IF versus IIF():wat is het verschil?

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


  1. Natuurlijke sortering die grote getallen ondersteunt

  2. ORA-20001 in R12 Verzamel schemastatistieken over 11g(FND_HISTOGRAM_COLS)

  3. SqlDependency activeert de OnChange-gebeurtenis niet wanneer de dataset wordt gewijzigd

  4. Een web-app maken vanaf nul met Python Flask en MySQL:deel 5