T-SQL Trigger (Tetikleyiciler)
Bu konumuzda, T-SQL Trigger (Tetikleyiciler) hakkında detaylı bilgiler ve örnekler paylaşıyoruz. T-SQL Trigger (Tetikleyiciler) Nedir? Gelin hep beraber öğrenelim.
T-SQL Trigger (Tetikleyiciler)
Tetikleyiciler tablo üzerinde herhangi bir işlem (delete, insert, update) gerçekleştiği zaman başka bir işlemin yapılmasını sağlamak için kullanılır.
Delete
Tablo üzerinde kayıt silindiğinde başka bir işlem yapmak için kullanılır.
CREATE TRIGGER tettikleyici_adı ON Tabo_adı
FOR DELETE
AS
BEGIN
------ T-SQL
END
Örnek: Bir öğrenci silindiği zaman öğrenciye ait derslerin silinmesini sağlayan trigger yazalım.
CREATE TRIGGER Ogr_Del ON OgrenciTanim
FOR DELETE
AS
BEGIN
DECLARE @ogrid INT
SELECT @ogrid = ogrid FROM deleted
DELETE FROM OgrDersleri
WHERE ogrid = @ogrid
END
Insert
Tabloya yeni bir kayıt eklendiğinde başka bir işlem yapmak için kullanılır.
CREATE TRIGGER tettikleyici_adı ON Tabo_adı
FOR INSERT
AS
BEGIN
------ T-SQL
END
Update
Tabloya mevcut kayıt güncellendiği zaman başka bir işlem yapmak için kullanılır.
CREATE TRIGGER tettikleyici_adı ON Tabo_adı
FOR UPDATE
AS
BEGIN
------ T-SQL
END
Uruntanim
Satis
Örnek: Herhangi bir ürün satıldığı zaman ürünün satılan miktarını güncelleyen trigger yazalım.
CREATE TRIGGER kayit_ekleme ON Satis
FOR INSERT
AS
BEGIN
DECLARE @uid INT
,@miktar FLOAT
SELECT @uid = uid
,@miktar = isnull(miktar, 0)
FROM inserted
UPDATE UrunTanim
SET satilanmiktar = isnull(satilanmiktar, 0) + @miktar
WHERE uid = @uid
END
Örnek: Herhangi bir ürünün satışı silindiği zaman ürünün satılan miktarını güncelleyen trigger yazalım.
CREATE TRIGGER kayit_ekleme ON Satis
FOR DELETE
AS
BEGIN
DECLARE @uid INT
,@miktar FLOAT
SELECT @uid = uid
,@miktar = isnull(miktar, 0)
FROM deleted
UPDATE UrunTanim
SET satilanmiktar = isnull(satilanmiktar, 0) - @miktar
WHERE uid = @uid
END
Örnek: Herhangi bir ürünün satışı güncellendiği zaman ürünün satılan miktarını güncelleyen trigger yazalım.
NOT: Ürünün sadece miktarı değil aynı zamanda ürünün kendisi de değiştirebiliriz. Yani satılan ürün yanlışlıkla satılmışsa yenisi ile güncellenir.
CREATE TRIGGER [dbo].[kayit_update] ON [dbo].[Satis]
FOR UPDATE
AS
BEGIN
DECLARE @ilk_uid INT
,@son_uid INT
,@ilk_miktar FLOAT
,@son_miktar FLOAT
SELECT @ilk_uid = uid
,@ilk_miktar = isnull(miktar, 0)
FROM deleted
SELECT @son_uid = uid
,@son_miktar = isnull(miktar, 0)
FROM inserted
IF (@son_uid = @ilk_uid)
UPDATE UrunTanim
SET satilanmiktar = isnull(satilanmiktar, 0) - @ilk_miktar + @son_miktar
WHERE uid = @son_uid
ELSE
BEGIN
UPDATE UrunTanim
SET satilanmiktar = isnull(satilanmiktar, 0) - @ilk_miktar
WHERE uid = @ilk_uid
UPDATE UrunTanim
SET satilanmiktar = isnull(satilanmiktar, 0) + @son_miktar
WHERE uid = @son_uid
END
END
Tepkiniz Nedir?