SQL Server IF…ELSE-betingelseserklæring: Eksempel på T-SQL-valg
⚡ Smart opsummering
IF…ELSE er en control-of-flow-sætning i SQL Server, der kører én blok af T-SQL, når en boolsk betingelse evalueres til sand, og en valgfri alternativ blok, når den samme betingelse evalueres til falsk.

Hvorfor har du brug for betingede erklæringer?
Betingede sætninger i SQL Server hjælper dig med at definere forskellige logiske elementer og handlinger for forskellige betingelser. De giver dig mulighed for at udføre forskellige handlinger baseret på de betingelser, der er defineret i sætningen. I virkeligheden udfører du mange handlinger, der afhænger af resultatet af en anden aktivitet eller situation.
Nogle eksempler på en betinget sætning i realtid er:
- Hvis det regner i morgen, planlægger jeg en biltur.
- Hvis flybilletter koster under $400 fra min by, så tager jeg på ferie i Europa; ellers foretrækker jeg et nærliggende turistmål.
Her kan du se, at én handling, ligesom bilturen ovenfor, er betinget afhængig af resultatet af en anden aktivitet, som er "om det vil regne eller ej i morgen." Tilsvarende MS SQL Server giver også mulighed for at udføre en T-SQL-sætning betinget.
IF…ELSE-sætning i SQL Server
I MS SQL er IF…ELSE en type betinget sætning. Enhver T-SQL-sætning kan udføres betinget ved hjælp af IF…ELSE. Figuren nedenfor forklarer, hvordan IF- og ELSE-grenene fungerer i SQL Server:
- Hvis betingelsen evalueres til True, udføres de T-SQL-sætninger, der følger IF-betingelsen i SQL Server.
- Hvis betingelsen evalueres til Falsk, udføres de T-SQL-sætninger, der følger efter nøgleordet ELSE.
- Når enten IF T-SQL-sætningerne eller ELSE T-SQL-sætningen er udført, fortsætter de andre ubetingede T-SQL-sætninger udførelsen.
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 udtryk, dvs. betingelsen resulterer i en boolsk værdi, når den evalueres.
- En IF…ELSE-sætning i SQL kan betinget håndtere en enkelt T-SQL-sætning eller en blok af T-SQL-sætninger.
- En blok af udsagn skal starte med nøgleordet BEGIN og slutte med nøgleordet END.
- Brug af BEGIN og END hjælper SQL Server med at identificere den sætningsblok, der skal udføres, og adskille den fra resten af T-SQL-sætningerne, der ikke er en del af IF…ELSE T-SQL-blokken.
- ANDET er valgfrit.
HVIS…ELLERS med kun en numerisk værdi i et boolsk udtryk
I dette første eksempel bruger det boolske udtryk kun numeriske værdier. Overvej betingelsen nedenfor, som altid er sand, fordi 1 er lig med 1.
Tilstand: SAND
IF (1=1) PRINT 'IF STATEMENT: CONDITION IS TRUE' ELSE PRINT 'ELSE STATEMENT: CONDITION IS FALSE'
Hvis forespørgslen køres med den sande betingelse (1=1), udskrives IF-forgreningsmeddelelsen:
Tilstand: FALSK
IF (1=2) PRINT 'IF STATEMENT: CONDITION IS TRUE' ELSE PRINT 'ELSE STATEMENT: CONDITION IS FALSE'
Med den falske betingelse (1=2) kører ELSE-grenen i stedet:
Antag at du har en tabel med navnet 'Guru99' med to kolonner og fire rækker, som vist nedenfor. Vi bruger denne 'Guru99'-tabellen i de følgende eksempler.
HVIS…ELLERS med en variabel i et boolsk udtryk
I stedet for konstante tal kan det boolske udtryk sammenligne et variabelFølgende eksempel deklarerer en heltalsvariabel og tester dens værdi.
Tilstand: SAND
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 lig med 4, kører IF-grenen og returnerer den række, hvor Tutorial_ID er 4:
Tilstand: FALSK
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 falsk, så ELSE-grenen kører og returnerer hver række, hvor Tutorial_ID ikke er 4:
HVIS…ELLERS med BEGIN…SLUT
Når en branch skal køre mere end én sætning, skal sætningerne pakkes ind i en BEGIN…END-blok. Eksemplet nedenfor kører to SELECT-sætninger i hver branch.
Tilstand: SAND
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
Da @Course_ID er mindre end eller lig med 2, kører IF-blokken begge SELECT-sætninger inde i BEGIN…END:
Tilstand: FALSK
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 gang er betingelsen falsk, så ELSE-blokken udfører sine to SELECT-sætninger:
IF-sætning uden ELSE
Du kan bruge en IF-sætning i SQL uden 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 udskriver følgende enkelte række:
Udførelse af den falske betingelse giver intet output. Overvej følgende forespørgsel:
DECLARE @Course_ID INT = 2 IF (@Course_ID <=0) Select * from Guru99 where Tutorial_ID = 1
Resultatet er tomt, som vist nedenfor:
Indlejrede IF…ELSE-sætninger
I modsætning til nogle andre programmeringssprogSQL Server indeholder ikke en ELSE IF-sætning i en IF…ELSE-betingelse. I stedet kan du indlejre en IF…ELSE-sætning i en anden, 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 udskriver den indbyggede IF…ELSE følgende resultat:
- Koden udskriver 'underage', hvis værdien af @age er under 18.
- Hvis ikke, udføres ELSE-delen. ELSE-delen indeholder en indlejret IF…ELSE.
- Hvis værdien af @age er under 50, udskriver dette 'Du er under 50'. Hvis ingen af disse betingelser er opfyldt, udskriver koden 'Senior'.











