Ohjelmatyönkulun hallinta IF- ja WHILE-lohkojen avulla
Kaikki ohjelmointikielet sisältävät elementtejä, joiden avulla voit määrittää ohjelman työnkulun tai lausekkeen suorittamisjärjestyksen. Vaikka T-SQL ei olekaan niin täydellinen kuin C#:n kaltaiset kielet, se tarjoaa joukon työnkulun hallinta -avainsanoja, joiden avulla voit suorittaa logiikkatestejä ja luoda silmukoita, jotka sisältävät T-SQL-tietojenkäsittelylausekkeet. Tällä oppitunnilla opit käyttämään T-SQL IF- ja WHILE-avainsanoja.
Tietoja työnkulun kielen T-SQL-ohjausobjektista
SQL Server tarjoaa kielielementtejä, jotka ohjaavat ohjelman suoritustyönkulkua T-SQL-erissä, tallennetuissa toimintosarjoissa ja käyttäjän määrittämillä monitavoilla funktioilla. Näiden työnkulun ohjausobjektin elementtien avulla voit ohjelmallisesti määrittää, suoritetaanko lausekkeita ja määritetäänkö niiden lausekkeiden järjestys ohjelmallisesti, jotka suoritetaan.
Näitä elementtejä ovat esimerkiksi seuraavat:
- JOS... ELSE, joka suorittaa koodin totuusarvolausekkeen perusteella.
- Samalla kun luodaan -silmukka, joka suorittaa ehdon, on tosi.
- ALKAA... END, joka määrittää sarjan T-SQL-lauseita, jotka tulee suorittaa yhdessä.
- Muita avainsanoja, kuten BREAK, CONTINUE, WAITFOR ja RETURN, joita käytetään T-SQL:n työnkulun hallinnan tukeen.
Tässä on esimerkki IF-lausekkeesta:
IF OBJECT_ID('dbo.tl') IS NOT NULL
DROP TABLE dbo.tl
GO
Käytä ehdollista logiikkaa ohjelmissasi käyttämällä IF...-funktiota. MUUTOIN
IF...-... ELSE-rakennetta käytetään T-SQL:ssä ehdollisesti predikaattiin perustuvan koodilohkon suorittamiseen. IF-lauseke määrittää, onko seuraava lauseke tai lohko (jos BEGIN... END-arvoa käytetään) suoritetaan. Jos predikaatti saa arvon TRUE, lohkon koodi suoritetaan. Kun predikaatti saa arvon FALSE tai UNKNOWN, lohkoa ei suoriteta, ellei valinnaista ELSE-avainsanaa käytetä toisen koodilohkon tunnistamiseen.
Seuraavassa IF-lausekkeessa kysytään tietokannalta, onko OBJECT_ID TYHJÄARVO, ja jos on, palauta TULOSTUS-lauseke. Tässä esimerkissä objekti EI ole tyhjäarvoinen ja siten EPÄTOSI, mikä tarkoittaa, että BEGIN/END-koodia ei suoriteta. PRINT-lauseke suoritetaan vain, jos objektia ei ole tietokannassa.
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;
Edellä olevan koodin ja vain IF-lausekkeen rajoitusten vuoksi tämä voi olla hämmentävää. IF- ja ELSE-lausekkeiden yhdistäminen tuo enemmän joustavuutta koodisi logiikkaan, ja voit käyttää useita ELSE-lausekkeita. ELSE-funktion käytössä on toinen suoritusvaihtoehto, kun IF-predikaatti saa arvon FALSE tai UNKNOWN, kuten seuraavassa esimerkissä:
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;
Tietojenkäsittelytoimintojen sisällä IF-funktion käyttäminen EXISTS-avainsanan kanssa voi olla hyödyllinen työkalu tehokkaille olemassaolotarkistuksille, kuten seuraavassa esimerkissä:
IF EXISTS (SELECT * FROM Sales.EmpOrders WHERE empid =5)
BEGIN
PRINT 'Employee has associated orders';
END;
Silmukoinnin ymmärtäminen WHILE-lausekkeiden avulla
WHILE-lauseketta käytetään koodin suorittamiseen predikaattiin perustuvassa silmukassa. Kuten IF-lauseke, WHILE-lauseke määrittää, määrittääkö seuraava lauseke vai lohko (jos BEGIN... END-arvoa käytetään) suoritetaan. -silmukka jatkaa suorittamista niin kauan kuin ehdon arvoksi tulee TRUE. Yleensä voit hallita silmukkaa muuttujalla, jonka predikaatti testaa ja jota käsitellään itse silmukan rungossa.
Seuraavassa esimerkissä käytetään muuttujaa @empid predikaattina ja muutetaan sen arvoa BEGIN-funktiossa... END-lohko:
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;
Jos haluat saada lisäasetuksia WHILE-silmukan sisällä, voit hallita työnkulkua JATKA- ja BREAK-avainsanoilla.