Veritabaninda olusturdunuz tablolar üzerinde yapilan islemleri takip etmek istiyorsaniz takip etmek istediginiz islem için bir trigger olusturmaniz gerekir. Eger INSERT islemi için bir trigger olusturduysaniz, bu tabloya bir insert islemi gerçeklestiginde tanimlamis oldugunuz trigger otomatik olarak çalisir. Trigger olusturdugunuz tablodaki hareketleri takip edebilir, bunlari e-posta ile aninda gönderebilirsiniz. Triggerlar sadece tablolar için degil view ve stored procedure gibi bir çok sql nesnesi içinde kullanilabilir. Bu makalemizde çok detaya girmeyip basit bir triggerin nasil tanimlanacagina bakacagiz.
Urun bilgilerini tuttugumuz basit bir tablomuz olsun. Bu tabloya insert yapildigi zaman, kaydedilen yeni urun bilgisini ekranda gösterelim.
use Denemeler –trigger daha önce tanimlanmis ise önce siliyoruz IF EXISTS (SELECT name FROM sysobjects WHERE name = ‘triggerdemo’ AND type = ‘TR’) DROP TRIGGER triggerdemo GO CREATE TRIGGER triggerdemo ON Urun FOR INSERT — hangi islemlerde triggerin çalisacagini belirliyoruz, insert, update, delete gibi AS –trigger çalistigi zaman yapmak istedigimiz islemleri bu kisma yazariz. SELECT * FROM inserted GO |
Triggerimizi olusturduktan sonra Urun tablosuna bir insert islemi yaparsak bize insert ettigimiz kaydi geri döndürecektir. Örnegin Urun tablomuza yapilan update islemlerini takip etmek istiyor ve yapilan updateleri baska bir tabloya atmak istiyorsak yukaridaki triggeri asagidaki hale getirmemiz yeterli olur.
use Denemeler
IF EXISTS (SELECT name FROM sysobjects WHERE name = ‘triggerdemo’ AND type = ‘TR’) DROP TRIGGER triggerdemo GO CREATE TRIGGER triggerdemo ON Urun FOR UPDATE AS
insert into UrunUpdateGecmis SELECT Urunadi,UrunAciklama,ResimUrl,fiyat ,getdate() as Tarih FROM inserted GO |
Yukaridaki Sql cümleciginde Urun tablosuna bir update islemi gerçeklestirildiginde güncellenmis olan kaydi UrunUpdateGecmis tablosuna tarih bilgisi ile atiyoruz. Burada dikkat ederseniz güncellenmis kaydi yine inserted tablosundan aliyoruz. Bunu sebebi update isleminin önce delete sonra insert mantigiyla çalismasi. Eger kaydin güncellenmeden önceki halini de almak istiyorsak deleted tablosunda alabiliriz.
Bazi durumdalar olusturdugumuz triggerlarin devre disi kalmasini isteyebiliriz. Mesela Urun tablosunda admin yetkisi ile bir toplu update yapacagiz ve bu updateinde geçmis tablosuna atilip veri kirliligine sebep olmasini istemiyoruz. Bu durumda islemimizi yapmadan önce triggerlari disable yapar islem bittikten sonrada yeniden enable yaparak sorunumuzu çözeriz. Bunu için
ALTER TABLE Urun DISABLE TRIGGER triggerdemo GO
update Urun set Fiyat = 2500 where UrunId = 6
ALTER TABLE Urun ENABLE TRIGGER triggerdemo GO |
Yukaridaki SQL cümlecigini incelerseniz öncelikle triggermiz disable edildi sonra update islemi gerçeklesti ve trigger yeniden enable edildi.
Eger tablo için olusturdunuz tüm triggerlari iptal etmek istiyorsaniz.
ALTER TABLE Urun DISABLE TRIGGER ALL — ALTER TABLE Urun ENABLE TRIGGER ALL |
mrb kolay gelsin.