Pages

SqlServer de Triggerler

sql serverde trigerler ve cursorlar ve stored procedure ‘ler öncelikle performans sonrada bazı güvenlik artıları için kullanılır.

Triggerler (tetikleyiciler) i bazen database de yaptığımız bazı işlemlerde o işlem ile birlikte başka olayın tetiklenmesini istediğimizde yaparız. örneğin bir ürün tablosuna kayıt girildiğinde o kayıta ait bir log tutulması nı otomatik olarak tetikleyicilerle yapabiliriz veya ürün silmek istediğizde o ürünün başka bir tablo ile etkileşimi olduğunu kontrol eder silmesini engelleyebiliriz veya ürünü silince ttikleyici ile ürünün başka bir tablodaki veilerini de silebiliriz.

cursor ise database den aldığımız verinin içinde gezinmemizi sağlar. bunu Database den Datareader ile dataları aldığımızda da yapabiliriz. fakat bu kullanıcı makinasında (client) yapılacağı için veri eğer büyükse performansı düşürür. bu işlemi server de yapıp client a sadece istenileni göndermek ise performans olarak daha iyi olur.

Triggerler : 

 

CREATE TRIGGER dbo.KontrolEt
   ON  dbo.tblKimlik
   AFTER  INSERT ,DELETE,UPDATE
AS
BEGIN
    declare @AdresSayisi int
    declare @KimlikSayisi int

select @KimlikSayisi = count(*)    from tblKimlik
select @AdresSayisi = count(*)    from tblAdres

   if     (@KimlikSayisi =  @AdresSayisi)
    insert into tblLog(logumuz) values('Doğru')
else
insert into tblLog(logumuz) values('yanlış')

SET NOCOUNT ON;
END

şimdi kodlarımızı anlatalım

CREATE TRIGGER dbo.KontrolEt
   ON  dbo.tblKimlik
   AFTER  INSERT ,DELETE,UPDATE

burada ilk satırda Trigger i oluşturuyor ve KontrolEt adını veriyoruz.Sonra hangi tablo üzerinde işlem olduğunda tetikleneceğini veriyoruz on dbo.tblKimlik ile.

after insert,delete,update ise tablonun hangi işlemlerden etkilendiğinde tetikleyicimizin çalışacağını gösterir.

AS
BEGIN
    declare @AdresSayisi int
    declare @KimlikSayisi int

select @KimlikSayisi = count(*)    from tblKimlik
select @AdresSayisi = count(*)    from tblAdres

burda ise trigeri başlatıyor ve AdresSayisi ve KimlikSayisi isimli 2 değişken deklare ediyoruz. Daha sonra Select cümlemiz ile tblKimlik tablomuz ve tblAdres tablomuzdan kayır sayısını alıp karşılaştırıyoruz.

   if     (@KimlikSayisi =  @AdresSayisi)
    insert into tblLog(logumuz) values('Doğru')
else
insert into tblLog(logumuz) values('yanlış')

set nocount on;

end

KimlikSayisi AdresSayisi ne eşitse tblLog Adlı tablomuza doğru değilse yanlış kayıtınnı işliyoruz.

set nocount on; end kısmında ise işlemimizi bitiriyoruz.

tabiki teikleyicimiz inser,delete,update işlemi yapıldığı anda tblKimlik tablosu üstünde çalışmaya başlayacaktır.

Trigerler select işleminde çalışmaz sadece insert,update, delete işlemlerinde çalışırlar.

Hiç yorum yok: