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.

  • 🧭 Betinget logikk: Betingelsessetninger lar SQL Server kjøre forskjellige T-SQL-handlinger avhengig av om en betingelse er sann eller usann.
  • IF- og ELSE-grener: Når den boolske betingelsen er sann, kjøres IF-blokken; når den er usann, kjøres den valgfrie ELSE-blokken i stedet.
  • 🔢 Boolsk uttrykk: Betingelsen må være et boolsk uttrykk som evalueres til sant eller usant, for eksempel (1=1) eller en variabel sammenligning.
  • 🧱 BEGIN…SLUTT-blokker: En gren som kjører mer enn én setning, må bryte disse setningene mellom nøkkelordene BEGIN og END.
  • ELLERS er valgfritt: En IF-setning kan stå alene uten en ELSE-del, så en falsk betingelse produserer rett og slett ingen handling.
  • 🔁 Nestede betingelser: SQL Server har ikke noe ELSE IF-nøkkelord, så du nester ett IF…ELSE inni et annet for å teste flere terskler.

Eksempler på betingelsessetninger for SQL Server IF…ELSE med T-SQL SELECT-spørringer

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:

Flytskjema for SQL Server IF…ELSE som viser den sanne IF-grenen og den falske ELSE-grenen

  • 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:

Resultat av den sanne numeriske HVIS-betingelsen som skriver ut HVIS-UTDRAG-meldingen

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:

Resultat av den falske numeriske HVIS-betingelsen som skriver ut ELSE-setningsmeldingen

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.

Eksempel Guru99-tabell som inneholder en Tutorial_ID-kolonne og fire rader med data

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:

Spørreresultat returnerer Tutorial_ID 4-raden når variabelbetingelsen er sann

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:

Spørreresultat fra ELSE-grenen returnerer alle rader unntatt Tutorial_ID 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:

Resultat av at IF-blokken kjører to SELECT-setninger for Tutorial_ID 1 og 2

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:

Resultat av ELSE-blokken som kjører to SELECT-setninger for Tutorial_ID 3 og 4

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:

Resultat på én rad skrives ut av en IF-setning som ikke har noen ELSE-del

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:

Tomt resultatsett produseres når IF-betingelsen uten ELSE er usann

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:

Resultat av den nestede IF…ELSE-utskriften Senior for en person på 60 år

  • 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».

Spørsmål og svar

IF…ELSE styrer utførelsesflyten og velger hvilke T-SQL-setninger eller -blokker som skal kjøres. CASE er et uttrykk som returnerer én verdi i en spørring, for eksempel i en SELECT- eller WHERE-setning. CASE kan ikke kjøre separate setninger.

IIF() er en forkortelse for et CASE-uttrykk, ikke IF…ELSE control-of-flow-setningen. Den returnerer én av to verdier basert på en boolsk test og brukes i spørringer. I motsetning til IF…ELSE kan ikke IIF() utføre separate T-SQL-setninger eller blokker.

Nei. IF…ELSE er en control-of-flow-setning, så den kan ikke vises i en SELECT-liste eller en WHERE-klausul. For å returnere betingede verdier i en spørring, bruk et CASE-uttrykk eller IIF()-funksjonen i stedet.

Skriv IF EXISTS (SELECT 1 FROM table WHERE condition) etterfulgt av setningen som skal kjøres. EXISTS returnerer sann når delspørringen finner minst én samsvarende rad, slik at IF-grenen bare kjøres når dataene finnes.

Ja. IF…ELSE brukes i lagrede prosedyrer, triggere, funksjoner og batcher for å forgrene logikk. Kombinert med BEGIN…END-blokker lar det en prosedyre kjøre forskjellige SQL-setninger avhengig av parametere eller spørreresultater.

IF…ELSE evaluerer betingelsen én gang og kjører den samsvarende grenen én gang. En WHILE-løkke gjentar setningsblokken sin så lenge betingelsen forblir sann. Bruk IF…ELSE for forgrening og WHILE for iterasjon.

Ja. GitHub Copilot kan utarbeide IF…ELSE-blokker, BEGIN…END-wrappere og nestede betingelser fra en naturlig språkledetekst. Se alltid gjennom de genererte boolske betingelsene og forgreningslogikken før du kjører skriptet på databasen.

AI- og maskinlæringsassistenter oversetter enkle regler til IF…ELSE- eller CASE-logikk, foreslår manglende grener og flagger betingelser som aldri kan være sanne. Utvikleren gjennomgår hvert forslag for korrekthet før det distribueres.

Oppsummer dette innlegget med: