Ohjelmatyönkulun hallinta IF- ja WHILE-lohkojen avulla

Valmis

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.