HA és WHILE blokkok használata a programfolyamat szabályozásához

Befejezett

Minden programozási nyelv tartalmaz olyan elemeket, amelyek segítenek meghatározni a program folyamatát vagy az utasítások végrehajtásának sorrendjét. A T-SQL bár nem olyan teljes funkcionalitású, mint a C#-hoz hasonló nyelvek, olyan vezérlő szerkezeteket biztosít, amelyeket logikai tesztek végrehajtásához és T-SQL adatmanipulációs utasításokat tartalmazó hurkok létrehozásához használhat. Ebben a leckében megtanulhatja, hogyan használhatja a T-SQL HA és a WHILE kulcsszavakat.

A folyamatnyelv T-SQL-vezérlésének ismertetése

Az SQL Server olyan nyelvi elemeket biztosít, amelyek a T-SQL-kötegekben, a tárolt eljárásokban és a többtényezős felhasználó által definiált függvényekben vezérlik a programok végrehajtását. Ezek a folyamatvezérlő elemek azt jelentik, hogy programozott módon meghatározhatja, hogy végrehajtja-e az utasításokat, és programozott módon határozza meg a végrehajtandó utasítások sorrendjét.

Ezek az elemek magukban foglalják, de nem korlátozódnak a következőkre:

  • HA... ELSE, amely logikai kifejezésen alapuló kódot hajt végre.
  • WHILE, amely egy ciklust hoz létre, amely végrehajtódik, amíg egy feltétel igaz.
  • KEZDŐDIK... END, amely több T-SQL-utasítást határoz meg, amelyeket együtt kell végrehajtani.
  • Egyéb kulcsszavak, például BREAK, CONTINUE, WAITFOR és RETURN, amelyek a T-SQL folyamatvezérlési műveleteinek támogatására szolgálnak.

Íme egy példa az IF utasításra:

IF OBJECT_ID('dbo.tl') IS NOT NULL
    DROP TABLE dbo.tl
GO

Feltételes logika használata a programokban a HA... MÁS

A HA... Az ELSE-struktúra a T-SQL-ben egy predikátumon alapuló kódblokk feltételes végrehajtására szolgál. A HA utasítás határozza meg, hogy végrehajtódik-e az alábbi utasítás vagy blokk (ha KEZDŐ... VÉG van használva). Ha a predikátum ÉRTÉKE IGAZ, a blokkban lévő kód végrehajtása történik. Ha a predikátum ÉRTÉKE HAMIS vagy ISMERETLEN, a blokk nem lesz végrehajtva, kivéve, ha az opcionális ELSE kulcsszóval azonosít egy másik kódblokkot.

A következő HA utasításban megkérdezzük az adatbázist, hogy a OBJECT_ID NULL értékű-e, és ha igen, akkor a PRINT utasítást adja vissza. Ebben a példában az objektum NEM null értékű, ezért HAMIS, ami azt jelenti, hogy a BEGIN/END kód nem lesz végrehajtva. A PRINT utasítás csak akkor lesz végrehajtva, ha az objektum nem létezik az adatbázisban.

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;

A fenti kódban pusztán egy HA utasítással való korlátozások miatt ez félreérthető lehet. A HA és az ELSE kombinálásával nagyobb rugalmasságot biztosít a kód logikájával, és több ELSE utasítást is használhat. Az ELSE használatával egy másik végrehajtási lehetőség áll rendelkezésére, amikor a HA predikátum ÉRTÉKE HAMIS vagy ISMERETLEN lesz, ahogyan az alábbi példában látható:

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;

Adatmanipulációs műveletek során az IF és az EXISTS kulcsszó használata hasznos eszközként szolgálhat a hatékony létezés-ellenőrzések végrehajtásához, amint azt az alábbi példa is mutatja.

IF EXISTS (SELECT * FROM Sales.EmpOrders WHERE empid =5)
BEGIN
    PRINT 'Employee has associated orders';
END;

A while utasításokkal történő hurkolás értése

A WHILE utasítás a kód predikátumon alapuló ciklusban való végrehajtására szolgál. A HA utasításhoz hasonlóan a WHILE utasítás határozza meg, hogy a következő utasítás vagy blokk (ha KEZDŐ...VÉG van használva) végrehajtásra kerül-e. A ciklus addig fut, amíg a feltétel értéke igaz. A ciklust általában a predikátum által tesztelt és a ciklus törzsében manipulált változóval vezérelheti.

Az alábbi példa a @empid predikátum változóját használja, és módosítja annak értékét a 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;

A WHILE cikluson belüli további lehetőségekért a CONTINUE és a BREAK kulcsszavakkal szabályozhatja a folyamatot.