HA és WHILE blokkok használata a programfolyamat szabályozásához
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.