SQL Serverda Trigger Nasil Olusturulur, Trigger Kullanarak Bir Tabloda Yapilan islemler Nasil Takip Edilir.

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

 

One thought on “SQL Serverda Trigger Nasil Olusturulur, Trigger Kullanarak Bir Tabloda Yapilan islemler Nasil Takip Edilir.

  1. mrb kolay gelsin.

    ben sql servr 2005 kullaniyorum 
    ve söyle bir sey yapsak olurmu acaba 
    siz zaten bunu makalenizde yazmissiniz
    Trigger olusturdugunuz tablodaki hareketleri takip edebilir, bunlari e-posta ile aninda gönderebilirsiniz. 

    bu cümle size ait.
    benim d etam olarak istedigim bu alsinda
    logo go plus kullaniyorum ve biiyrunuz oda sql kullanyor..
    invoice(fatura ) tablisuunda yeni bir fatura eklendiginde(insert) ve fatura degisirildiginde(udate) o faturayi  triggerin içindeki belirtilen sabit mail adresine mail atmasini nasil saglayabailiriz.
    yardimci olursaniz sevinirim.
    ii çalimalr kolay gelsin.
    bu arada dilerseniz tablo alanalrini size mail atabilirim.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir