Bruke IF- og WHILE-blokker til å kontrollere programflyten
Alle programmeringsspråk inkluderer elementer som hjelper deg med å bestemme flyten i programmet, eller i hvilken rekkefølge setninger utføres. Selv om det ikke er så fullt utvalgt som språk som C#, gir T-SQL et sett med kontroll-av-flyt-nøkkelord du kan bruke til å utføre logiske tester og opprette løkker som inneholder T-SQL-datamanipuleringssetningene. I denne leksjonen lærer du hvordan du bruker nøkkelordene T-SQL IF og WHILE.
Forstå T-SQL-kontrollen for flytspråk
SQL Server inneholder språkelementer som styrer flyten av programkjøring i T-SQL-grupper, lagrede prosedyrer og brukerdefinerte funksjoner med flere setninger. Disse kontroll-av-flyt-elementene betyr at du programmatisk kan bestemme om du vil kjøre setninger og programmatisk bestemme rekkefølgen på de setningene som skal utføres.
Disse elementene omfatter, men er ikke begrenset til:
- HVIS... ELSE, som utfører kode basert på et boolsk uttrykk.
- WHILE, som oppretter en løkke som utfører å gi en betingelse, er sann.
- BEGYNNE... END, som definerer en serie med T-SQL-setninger som skal kjøres sammen.
- Andre nøkkelord, for eksempel BREAK, CONTINUE, WAITFOR og RETURN, som brukes til å støtte T-SQL control-of-flow-operasjoner.
Her er et eksempel på HVIS-setningen:
IF OBJECT_ID('dbo.tl') IS NOT NULL
DROP TABLE dbo.tl
GO
Bruk betinget logikk i programmene ved hjelp av HVIS... ELLERS
HVIS... ELSE-struktur brukes i T-SQL til betinget kjøring av en kodeblokk basert på et predikat. HVIS-setningen bestemmer om følgende setning eller blokk (hvis BEGIN... END brukes) kjøres. Hvis predikatet evalueres til SANN, kjøres koden i blokken. Når predikatet evalueres til USANN eller UKJENT, kjøres ikke blokken, med mindre det valgfrie ELSE-nøkkelordet brukes til å identifisere en annen kodeblokk.
I følgende IF-setning spør vi databasen om OBJECT_ID ER NULL, og i så fall returnerer vi PRINT-setningen. I dette eksemplet er objektet IKKE null og derfor USANN, noe som betyr at BEGIN/END-koden ikke blir utført. PRINT-setningen kjøres bare hvis objektet ikke finnes i databasen.
USE TSQL;
GO
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
PRINT 'The specified object does not exist';
END;
På grunn av begrensningene med koden ovenfor med bare en IF-setning, kan dette være forvirrende. Ved å kombinere HVIS og ELSE får du mer fleksibilitet med logikken i koden, og du kan bruke flere ELSE-setninger. Med bruk av ELSE har du et annet kjøringsalternativ når HVIS-predikatet evalueres til USANN eller UKJENT, som i eksemplet nedenfor:
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
PRINT 'The specified object does not exist';
END
ELSE
BEGIN
PRINT 'The specified object exists';
END;
I datamanipuleringsoperasjoner kan bruk av HVIS med EXISTS-nøkkelordet være et nyttig verktøy for effektive eksistenskontroller, som i eksemplet nedenfor:
IF EXISTS (SELECT * FROM Sales.EmpOrders WHERE empid =5)
BEGIN
PRINT 'Employee has associated orders';
END;
Forstå looping ved hjelp av WHILE-setninger
WHILE-setningen brukes til å kjøre kode i en løkke basert på et predikat. I likhet med IF-setningen bestemmer WHILE-setningen om følgende setning eller blokk (hvis BEGIN... END brukes) kjøres. Løkken fortsetter å kjøre så lenge betingelsen evalueres til SANN. Vanligvis kontrollerer du løkken med en variabel som er testet av predikatet og manipulert i selve løkkens brødtekst.
Følgende eksempel bruker variabelen @empid i predikatet og endrer verdien i BEGIN... END-blokk:
DECLARE @empid AS INT = 1, @lname AS NVARCHAR(20);
WHILE @empid <=5
BEGIN
SELECT @lname = lastname FROM HR.Employees
WHERE empid = @empid;
PRINT @lname;
SET @empid += 1;
END;
Hvis du vil ha ekstra alternativer i en WHILE-løkke, kan du bruke nøkkelordene CONTINUE og BREAK til å kontrollere flyten.