Delphi - Triggerek kezelése

Transact SQL 14. rész

forráskód letöltése
Ebben a részben a triggerek létrehozásával, módosításával és megszüntetésével foglalkozunk.
01.sql
Az első lépés most is egy adatbázis létrehozása.
02.sql
A triggerek táblákhoz kapcsolódnak, így létrehozunk egy táblát is az adatbázisban, melynek lesz egy kulcsmezője (KeyField), egy szöveges adatot tartalmazó mezője (TextValue) és egy dátumot és időt tartalmazó mezője (LastModified).
03.sql
A harmadik lépésben létrehozunk egy triggert a táblához, amely a LastModified mezőbe fogja beszúrni azt a dátumot és időpontot, amikor az adott rekord adatait módosították. Ez a következőképpen néz ki:
CREATE TRIGGER TestTrigger ON TestTable
FOR INSERT, UPDATE
AS
UPDATE TestTable
SET LastModified=GetDate()
FROM Inserted
WHERE TestTable.KeyField = Inserted.KeyField
A triggert létrehozó utasítása tehát CREATE TRIGGER. Ezután áll a trigger neve, majd az ON kulcsszó után annak a táblának a neve, amelyhez kapcsolódik. A FOR kulcsszó után megadhatjuk az INSERT, UPDATE vagy DELETE kulcsszókat. Ez határozza meg, hogy a trigger milyen események hatására fut le. Egyszerre akár mind a hármat használhatjuk. Ezután következik az AS kulcsszó, és utána a végrehajtandó SQL parancsok. Az INSERT és UPDATE eseményeknél az Inserted tábla rekordszerkezete megegyezik a tábla szerkezetével, és azokat a rekordokat tartalmazza, amelyeket beszúrtak, illetve módosítottak. A KeyField mezőre azért van szükség, hogy az egyes rekordokat egyértelműen tudjuk azonosítani.
04.sql
Beszúrunk néhány rekordot, hogy lássuk, hogyan is működik a trigger.
INSERT INTO TestTable (TextValue) VALUES ('Alfa');
INSERT INTO TestTable (TextValue) VALUES ('Béta');
INSERT INTO TestTable (TextValue) VALUES ('Gamma');
Látható, hogy csak a TextValue mezőben adunk meg értéket, a rekordok lekérdezésénél mégis ki lesz töltve a LastModified mező, méghozzá a rekordok beszúrásának időpontjával.
05.sql
Módosítjuk a triggert úgy, hogy ne csak a dátumot írja be, hanem a szöveges mezőbe beírt adatot is módosítsa úgy, hogy a sztring elejéről törli a felesleges szóközöket. A módosítást az ALTER TRIGGER utasítással tudjuk elvégezni, ennek szintaktikája megegyezik a CREATE TRIGGER utasításéval.
ALTER TRIGGER TestTrigger ON TestTable
FOR INSERT, UPDATE
AS
  UPDATE TestTable
  SET TestTable.TextValue = LTrim(TestTable.TextValue)
  FROM Inserted
  WHERE TestTable.KeyField = Inserted.KeyField
  UPDATE TestTable
  SET LastModified = GetDate()
  FROM Inserted
  WHERE TestTable.KeyField = Inserted.KeyField
06.sql
Beszúrunk még néhány rekordot, hogy lássuk az új trigger jól működik-e. Szándékosan olyan adatokat szúrunk be, melyeket a triggernek módosítania kell.
07.sql
A DROP TRIGGER utasítással töröljük a triggert. Az utasítás után egyszerűen meg kell adni a törlendő trigger nevét.
DROP TRIGGER TestTrigger
08.sql
Újra beszúrunk néhány rekordot, és látni fogjuk, hogy a trigger tényleg megszűnt.
09.sql
Töröljük az adatbázist.

Transact SQL cikksorozat