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.

  • 🧭 Betinget logik: Betingede sætninger lader SQL Server udføre forskellige T-SQL-handlinger afhængigt af om en betingelse er sand eller falsk.
  • IF- og ELSE-grene: Når den boolske betingelse er sand, kører IF-blokken; når den er falsk, kører den valgfri ELSE-blok i stedet.
  • 🔢 Boolsk udtryk: Betingelsen skal være et boolsk udtryk, der evalueres til sandt eller falsk, f.eks. (1=1) eller en variabelsammenligning.
  • 🧱 BEGIN…SLUT blokke: En branch, der kører mere end én sætning, skal ombryde disse sætninger mellem nøgleordene BEGIN og END.
  • ELLERS er valgfrit: En IF-sætning kan stå alene uden en ELSE-del, så en falsk betingelse producerer simpelthen ingen handling.
  • 🔁 Indlejrede betingelser: SQL Server har intet ELSE IF-nøgleord, så du indlejrer et IF…ELSE i et andet for at teste flere tærskler.

Eksempler på SQL Server IF…ELSE-betingelseserklæringer med T-SQL SELECT-forespørgsler

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:

Flowchart for SQL Server IF…ELSE, der viser den sande IF-gren og den falske ELSE-gren

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

Resultat af den sande numeriske HVIS-betingelse, der udskriver HVIS-UDTRYKNING-meddelelsen

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:

Resultat af den falske numeriske HVIS-betingelse, der udskriver ELSE-sætningsmeddelelsen

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.

Prøve Guru99-tabel, der indeholder en Tutorial_ID-kolonne og fire rækker med data

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:

Forespørgselsresultat returnerer rækken Tutorial_ID 4, når variabelbetingelsen er sand

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:

Forespørgselsresultat fra ELSE-grenen returnerer alle rækker undtagen Tutorial_ID 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:

Resultat af IF-blokken, der kører to SELECT-sætninger for Tutorial_ID 1 og 2

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:

Resultat af ELSE-blokken, der kører to SELECT-sætninger for Tutorial_ID 3 og 4

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:

Resultat i én række udskrevet af en IF-sætning, der ikke har nogen ELSE-del

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:

Tomt resultatsæt produceres, når IF-betingelsen uden ELSE er falsk

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:

Resultat af den indbyggede IF…ELSE-udskrivning Senior for en alder på 60

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

Ofte Stillede Spørgsmål

IF…ELSE styrer udførelsesflowet og vælger hvilke T-SQL-sætninger eller -blokke der skal køres. CASE er et udtryk, der returnerer en enkelt værdi i en forespørgsel, f.eks. i en SELECT- eller WHERE-klausul. CASE kan ikke køre separate sætninger.

IIF() er en forkortelse for et CASE-udtryk, ikke IF…ELSE control-of-flow-sætningen. Den returnerer en af ​​to værdier baseret på en boolsk test og bruges i forespørgsler. I modsætning til IF…ELSE kan IIF() ikke udføre separate T-SQL-sætninger eller blokke.

Nej. IF…ELSE er en control-of-flow-sætning, så den kan ikke vises i en SELECT-liste eller en WHERE-klausul. For at returnere betingede værdier i en forespørgsel skal du i stedet bruge et CASE-udtryk eller funktionen IIF().

Skriv IF EXISTS (SELECT 1 FROM table WHERE condition) efterfulgt af den sætning, der skal køres. EXISTS returnerer sand, når underforespørgslen finder mindst én matchende række, så IF-grenen kun udføres, når dataene findes.

Ja. IF…ELSE bruges i lagrede procedurer, triggere, funktioner og batches til forgreningslogik. Kombineret med BEGIN…END-blokke lader det en procedure køre forskellige SQL-sætninger afhængigt af parametre eller forespørgselsresultater.

IF…ELSE evaluerer sin betingelse én gang og kører den matchende branch én gang. En WHILE-løkke gentager sin statement-blok, så længe betingelsen forbliver sand. Brug IF…ELSE til branching og WHILE til iteration.

Ja. GitHub Copilot kan udarbejde IF…ELSE-blokke, BEGIN…END-wrappere og indlejrede betingelser fra en prompt i naturligt sprog. Gennemgå altid de genererede boolske betingelser og forgreningslogik, før du kører scriptet på din database.

AI- og maskinlæringsassistenter oversætter regler på almindeligt engelsk til IF…ELSE- eller CASE-logik, foreslår manglende grene og markerer betingelser, der aldrig kan være sande. Udvikleren gennemgår hvert forslag for korrekthed, før det implementeres.

Opsummer dette indlæg med: