Hepimizin bildiği gibi Triggerlar belli olaylardan sonra kendiliğinden
devreye girip çalışan yapılardır.Temel olarak verilerimiz için INSERT ,
UPDATE ve DELETE triggerları mevcuttur. bir tigger bu olayların tününe tepki verecek şekilde
programlanabildiği gibi her olay için ayrı bir trigger
da yazılabilir tabi bunun maliyeti daha çok olur.. Eğer tüm olayları aynı trigger üzerinde denetlemek istiyorsak söyle bir sorunumuz
oluyordu. Triggerı tetikleyen olay acaba hangisiydi.
INSERT mi , UPDATE mi , DELETE mi. Genel olarak sakıncalı olsada tüm olaylara uygun kodlar yazılıyordu. yada her olay
için ayrı bir tigger...
Ama bu aşağıdaki metotla triggeri hangi olayın çağırdığını rahatlıkla anlayabiliriz.
Tek yapmamız gereken bir değişken oluşturup geçici INSERTED ve DELETED
tablolarını sorgulamak.
Bir INSERT işleminde sadece
INSERTED tablosu etkilenir. Eğer işlem DELETE ise DELETED tablosu etkilenir. UPDATE
yapıyor isek verilerin eski halleri DELETED tablosunda yeni halleri
INSERTED tablosunda bulunur. metodumuzda bu gerçek üzerinden tespitlerini
yapıyor.
declare @ISLEM VARCHAR(50)
CREATE
TRIGGER TRG_XXXXXXX
ON TABLOADI
After INSERT , UPDATE ,DELETE
AS
DECLARE @ISLEM VARCHAR(10)
IF EXISTS(SELECT * FROM INSERTED)
IF EXISTS(SELECT * FROM DELETED)
SET @ISLEM = 'U'
ELSE
SET @ISLEM = 'I'
ELSE
SET @ISLEM = 'D'
IF @ISLEM = 'I'
BEGIN
-- TETİKLEYEN OLAY INSERT
END ELSE
IF @ISLEM = 'D'
BEGIN
-- TETİKLEYEN OLAY DELETE
END ELSE
IF @ISLEM = 'U'
BEGIN
-- TETİKLEYEN OLAY UPDATE
END

[
25.06.2008]