s .l Server 2012 introducerede en ny indbygget logisk funktion s .l IIF. Det er en stenografi form for at skrive CASE statement logik eller hvis-ellers logik.
vi udforskede Sagsopgørelse I S .l i min tidligere artikel. Vi bruger en sag erklæring til at returnere et resultat baseret på den definerede betingelse. Det ligner en IF..ELSE … så erklæring evaluerer et udtryk og returnerer output. Sagsopgørelsen er tilgængelig i næsten alle versioner af s .l Server.
lad os undersøge denne s .l IIF-funktion i denne artikel.,
SQL IIF Erklæring oversigt
Vi bruger følgende format til at skrive Tilfælde erklæring logik i SQL-forespørgsler
VÆLG TILFÆLDE Udtryk, Når expression1 Så Result1 Når udtryk2 Så Result2 … ANDET Resultat END
Vi kan skrive denne kode ved hjælp af SQL IIF erklæring syntaks som følgende.
IIF(boolean_expression, true_value, false_value)
- Boolean_expression: Den første parameter i en SQL-IIF erklæring er en boolesk udtryk., Det skal være en gyldigt boolesk udtryk, ellers får vi en undtagelse
- True_Value: Hvis boolean_expression er SANDT, det returnerer værdien i true_value parameter
- False_Value: Hvis boolean_expression er FALSK, det returnerer værdien i false_value parameter
Lad os udforske SQL IIF-sætning ved hjælp af eksempler.
eksempel 1: s .l IIF-erklæring til sammenligning af heltalværdier
i det følgende eksempel er specificeret boolsk udtryk retur False ( 2> 3 ikke sandt)., Due to this, it returns the value specified in the false_value parameter.
1
|
SELECT IIF(2 > 3, ‘TRUE’, ‘FALSE’ )
|
Similarly, if the condition is TRUE (5>3 is TRUE) so it returns the value of true_value parameter.,
1
|
SELECT IIF(5 > 3, ‘TRUE’, ‘FALSE’ )
|
Example 2: SQL IIF statement with variables
In the following example, we specified two integer variables and assigned values. We use variables for comparison in the IIF statement.,
1
2
|
DECLARE @A INT = 80, @B INT = 70
SELECT IIF(@A >= @B, ‘PASS’, ‘FAIL’ )
|
The specified condition (80>70) is TRUE, so it returns the value PASS.,
Eksempel 3: SQL IIF-sætning til at sammenligne to strenge
I det følgende eksempel, vi ønsker at sammenligne string data ved hjælp af SQL IIF erklæring. Vi ønsker at kende den person, smag baseret på personnavnet.,
1
2
|
DECLARE @Person Varchar(100) = ‘Raj’
SELECT IIF(@Person=’Raj’,’Likes Apple’,’NA’)
|
We can specify multiple conditions in SQL IIF statement as well.,i>
1
2
|
DECLARE @Person Varchar(100) = ‘Raj’
SELECT IIF(@Person in(‘Raj’, ‘Mohan’),’Likes Apple’,’Likes Orange’)
|
The query should return Likes Orange if the person name is not in the IN clause., I det følgende eksempel findes person Vinay ikke i variablen @Person, så den returnerer værdi for en falsk klausul.
Eksempel 4: Indlejrede SQL-IIF erklæring
Vi kan bruge Indlejrede SQL-IIF erklæring samt at angive flere betingelser
I denne SQL-funktionen IIF, kontrollerer, om den første betingelse, og hvis betingelse er SAND, det returnerer værdien. I vores tilfælde er det falsk (Person Vinay stemmer ikke overens med Raj).den kontrollerer for den anden tilstand og returnerer resultater, hvis det er sandt.,
Hvis ingen af betingelserne er sande, returnerer den standard falsk meddelelse.
eksempel 5: s .l IIF-erklæring med en tabelkolonne
i de foregående eksempler angiver vi enten værdier direkte i IIF-sætningen eller specificerede variabler for den. Normalt vil vi bruge dem med de eksisterende data i en s .l-tabel. Vi kan også bruge IIF-sætningen med en tabelkolonne.,
i det følgende eksempel ønsker vi at kende leverandørnavnet fra Indkøbsordre-tabellen i databaseide .orldimporters-databasen.
Hvis leverandørnavnet ikke findes for et bestemt leverandør-id, returnerer det den angivne falske værdi i s .l IIF-erklæring.
Eksempel 6: SQL IIF erklæring med en tabel, kolonne, og den samlede funktion
Eksempel 7: SQL IIF erklæring og data type forrang
Vi har måske forskellige data typer for resultaterne., Hvis vi har forskellige datatyper, der er specificeret i resultatbetingelserne, giver s .l Server den højeste prioritet datatype. I det følgende eksempel, for den falske tilstand(11>19), vil resultatet være false_value argument, dvs 100. Det skal være af e heltal datatype, men vi får output 40.0, fordi det andet argument flyder (2.6) har høj prioritet end et heltal.,
1
|
SELECT IIF(11 > 19, 2.6, 40)
|
You can check the data type precedence in the following image
Example 8: SQL IIF with NULL values
We should be careful in NULL values inside the SQL IIF function.,
1
2
3
|
SELECT
IIF(100 > 99, NULL, NULL) AS Result;
|
We cannot specify NULL in both the true and false arguments. We get the following error message.,
MSG 8133, niveau 16, tilstand 1, linje 1 mindst et af resultatudtrykkene i en SAGSSPECIFIKATION skal være et andet udtryk end NULKONSTANTEN.
i fejlmeddelelsen, kan du se det giver oplysninger om sagen specifikation, men vi brugte s .l IIF funktion. Vi vil se på dette i det næste eksempel.
Du skal angive mindst et af et sandt eller falsk argument.,
1
2
|
SELECT
IIF(100 > 99, ‘Hello’, NULL) AS Result;
|
The similarity between SQL IIF statement and CASE Statement
In the introduction of SQL IIF Statement, we mentioned that it is a shorthand form of writing CASE statement logic or IF-ELSE logic., Ja, det er sandt. Internt s .l Server konverterer sætningen til SAGSOPGØRELSEN og udfører. Vi kan tjekke det ved hjælp af den faktiske eksekveringsplan for en forespørgsel.
Udfør forespørgslen fra Eksempel 6 med en faktisk eksekveringsplan.
i den faktiske udførelsesplan skal du se på egenskaberne for Compute Scalar. Du kan se det udfører SAGSANGIVELSEN internt.
konklusion
i denne artikel undersøgte vi s .l IIF-sætningen, der er en ny måde at skrive SAGSOPGØRELSESRELATEREDE betingelser på., Den er tilgængelig fra S .l 2012 og fremefter. Du bør udforske dette for at være bekendt med dette. Hvis du har kommentarer eller spørgsmål, er du velkommen til at forlade dem i kommentarerne nedenfor.,
- Forfatter
- Seneste Indlæg
Han er skaberen af en af de største gratis online samlinger af artikler om et enkelt emne, med hans 50-del serie om SQL Server Altid På Tilgængelighed Grupper. Baseret på hans bidrag til S .l Server-samfundet er han blevet anerkendt med forskellige priser, herunder den prestigefyldte “årets bedste forfatter” kontinuerligt i 2020 og 2021 på s .lshack.,
Raj er altid interesseret i nye udfordringer, så hvis du har brug for rådgivning om ethvert emne, der er dækket i hans skrifter, kan han kontaktes på rajendra.gupta16@Gmail.,com
Vis alle indlæg af Rajendra Gupta
- Udfører mindre og større version opgraderinger til AWS RDS SQL Server – januar 29, 2021
- Implementering AWS RDS-PostgreSQL tilfælde – januar 27, 2021
- overfør dine on-premises SQL-databaser til at AWS RDS SQL Server ved hjælp af AWS DMS – 25 januar 2021