SQL Server IF…ELSE-betingelsessetning: Eksempel på T-SQL-valg
⚡ Smart oppsummering
IF…ELSE er en control-of-flow-setning i SQL Server som kjører én blokk med T-SQL når en boolsk betingelse evalueres til sann, og en valgfri alternativ blokk når den samme betingelsen evalueres til usann.

Hvorfor trenger du betingede erklæringer?
Betingelsessetninger i SQL Server hjelper deg med å definere ulik logikk og handlinger for ulike betingelser. De lar deg utføre ulike handlinger basert på betingelsene som er definert i setningen. I virkeligheten utfører du mange handlinger som avhenger av resultatet av en annen aktivitet eller situasjon.
Noen eksempler på en betinget setning i sanntid er:
- Hvis det regner i morgen, planlegger jeg en biltur.
- Hvis flybillettene koster mindre enn 400 dollar fra byen min, drar jeg på ferie i Europa; ellers foretrekker jeg et turistmål i nærheten.
Her kan du se at én handling, som bilturen ovenfor, er betinget avhengig av resultatet av en annen aktivitet, som er «om det vil regne eller ikke i morgen». På samme måte har MS SQL Server gir også muligheten til å utføre en T-SQL-setning betinget.
IF…ELSE-setning i SQL Server
I MS SQL er IF…ELSE en type betinget setning. Enhver T-SQL-setning kan utføres betinget ved hjelp av IF…ELSE. Figuren nedenfor forklarer hvordan IF- og ELSE-grenene fungerer i SQL Server:
- Hvis betingelsen evalueres til True, kjøres T-SQL-setningene som følger IF-betingelsen i SQL Server.
- Hvis betingelsen evalueres til usann, kjøres T-SQL-setningene som følger ELSE-nøkkelordet.
- Når enten IF T-SQL-setningene eller ELSE T-SQL-setningen er utført, fortsetter de andre ubetingede T-SQL-setningene å kjøre.
IF…ELSE Syntaks og regler i SQL
Syntaks:
IF <Condition> {Statement | Block_of_statement} [ ELSE {Statement | Block_of_statement}]
regler:
- Betingelsen skal være et boolsk uttrykk, dvs. at betingelsen resulterer i en boolsk verdi når den evalueres.
- En IF…ELSE-setning i SQL kan betinget håndtere én T-SQL-setning eller en blokk med T-SQL-setninger.
- En blokk med utsagn skal starte med nøkkelordet BEGIN og avsluttes med nøkkelordet END.
- Bruk av BEGIN og END hjelper SQL Server med å identifisere setningsblokken som må kjøres og skille den fra resten av T-SQL-setningene som ikke er en del av IF…ELSE T-SQL-blokken.
- ANDET er valgfritt.
HVIS…ELLERS med bare en numerisk verdi i et boolsk uttrykk
I dette første eksemplet bruker det boolske uttrykket bare numeriske verdier. Tenk på betingelsen nedenfor, som alltid er sann fordi 1 er lik 1.
Tilstand: SANN
IF (1=1) PRINT 'IF STATEMENT: CONDITION IS TRUE' ELSE PRINT 'ELSE STATEMENT: CONDITION IS FALSE'
Hvis du kjører spørringen med den sanne betingelsen (1=1), skrives IF-grenmeldingen ut:
Tilstand: FALSE
IF (1=2) PRINT 'IF STATEMENT: CONDITION IS TRUE' ELSE PRINT 'ELSE STATEMENT: CONDITION IS FALSE'
Med den falske betingelsen (1=2) kjører ELSE-grenen i stedet:
Anta at du har en tabell som heter 'Guru99' med to kolonner og fire rader, som vist nedenfor. Vi bruker denne 'Guru99'-tabellen i eksemplene som følger.
HVIS…ELLERS med en variabel i et boolsk uttrykk
I stedet for konstante tall kan det boolske uttrykket sammenligne et variabelFølgende eksempel deklarerer en heltallsvariabel og tester verdien av den.
Tilstand: SANN
DECLARE @Course_ID INT = 4 IF (@Course_ID = 4) Select * from Guru99 where Tutorial_ID = 4 ELSE Select * from Guru99 where Tutorial_ID != 4
Fordi @Course_ID er lik 4, kjører IF-grenen og returnerer raden der Tutorial_ID er 4:
Tilstand: FALSE
DECLARE @Course_ID INT = 4 IF (@Course_ID != 4) Select * from Guru99 where Tutorial_ID = 4 ELSE Select * from Guru99 where Tutorial_ID != 4
Her er betingelsen usann, så ELSE-grenen kjører og returnerer hver rad der Tutorial_ID ikke er 4:
HVIS…ELLERS med BEGYN…SLUTT
Når en gren må kjøre mer enn én setning, pakkes setningene inn i en BEGIN…END-blokk. Eksemplet nedenfor kjører to SELECT-setninger i hver gren.
Tilstand: SANN
DECLARE @Course_ID INT = 2 IF (@Course_ID <=2) BEGIN Select * from Guru99 where Tutorial_ID = 1 Select * from Guru99 where Tutorial_ID = 2 END ELSE BEGIN Select * from Guru99 where Tutorial_ID = 3 Select * from Guru99 where Tutorial_ID = 4 END
Siden @Course_ID er mindre enn eller lik 2, kjører IF-blokken begge SELECT-setningene i BEGIN…END:
Tilstand: FALSE
DECLARE @Course_ID INT = 2 IF (@Course_ID >=3) BEGIN Select * from Guru99 where Tutorial_ID = 1 Select * from Guru99 where Tutorial_ID = 2 END ELSE BEGIN Select * from Guru99 where Tutorial_ID = 3 Select * from Guru99 where Tutorial_ID = 4 END
Denne gangen er betingelsen usann, så ELSE-blokken utfører sine to SELECT-setninger:
IF-setning uten ELSE
Du kan bruke en IF-setning i SQL uten en ELSE-del, fordi ELSE-delen er valgfri. For eksempel:
DECLARE @Course_ID INT = 2 IF (@Course_ID <=2) Select * from Guru99 where Tutorial_ID = 1
Den skriver ut følgende enkeltrad:
Utførelse av den falske betingelsen gir ingen utdata. Vurder følgende spørring:
DECLARE @Course_ID INT = 2 IF (@Course_ID <=0) Select * from Guru99 where Tutorial_ID = 1
Resultatet er tomt, som vist nedenfor:
Nestede IF…ELSE-setninger
I motsetning til noen andre programmerings språk, SQL Server tilbyr ikke en ELSE IF-setning i en IF…ELSE-betingelse. I stedet kan du neste en IF…ELSE-setning i en annen, som vist nedenfor:
DECLARE @age INT; SET @age = 60; IF @age < 18 PRINT 'underage'; ELSE BEGIN IF @age < 50 PRINT 'You are below 50'; ELSE PRINT 'Senior'; END;
For en person på 60 år skriver den nestede IF…ELSE ut følgende resultat:
- Koden skriver ut «underage» hvis verdien av @age er under 18.
- Hvis ikke, utføres ELSE-delen. ELSE-delen inneholder en nestet IF…ELSE.
- Hvis verdien av @age er under 50, skriver dette ut «Du er under 50». Hvis ingen av disse betingelsene er oppfylt, skriver koden ut «Senior».











