SQL Server : Triggers

sql SQL Server : Triggers sql server SQL Server’da bilmemiz gereken başka birşey ise trigger’lardır. Bunları C# da gördüğümüz event lara benzetebiliriz. Şu şey meydana gelince bunu yap şeklinde.
Örneğin bir kategori silindiğinde ona bağlı olan tüm ürünlerin kategorisini değiştirmek yada o kategoriyi silmek istiyorsunuz. Bunu SQL Server’da Trigger yapısı ile çok kolay bir şekilde gerçekleştirebiliriz. Bahsettiğim gibi, daha önce gördüğümüz olaylardan hiçbir farkı yok. Biz “Butona tıklanınca şunu yap”, “Mouse formun üzerine geldiğinde şunu yap” diye belirttiğimiz şeylerin trigger yapısı ile (görev olarak) farkı yoktur.

SQL Server da Trigger yapısı nasıl çalışır onu görelim şimdi ;

Trigger lar her tablonun altında Trigger klasörünün içerisinde bulunur. Biz triggerlerimizi bu klasörlerin altında yazacağız. Her tablonun kendine has trigger i olabilir, örneğin Kategoriler tablosu için yazılmış bir triggerın Urunler tablosu için hiçbir geçerliliği yoktur.

Triggerlar hakkında

Trigger yazarken önce şunu belirlemeliyiz;  trigger ne zaman çalışacak ? Yeni veri eklenirken mi, düzenlenirken mi silinirken mi, veri çağrılırken mi ?

2 çeşit trigger vardır, instead ve after trigger.

Instead Trigger

Belirtilen işlem gerçekleşmeden önce trigger tetiklenir.

After Trigger

Belirtilen işlem gerçekleştikten sonra trigger tetiklenir.

Trigger nasıl yazılır ?

Aşağıda verdiğim örnekte şu yapılıyor ; Bir kategori silinmek istenildiğinde, eğer o kategoriye bağlı Urunler tablosunda ürün varsa kategoriyi silme Aktif kolonunu(bizim kategorilerin aktif olup olmadığını kontrol için oluşturduğumuz bir kolon..) 0 yap (pasif yap). Eğer Urunler tablosunda bu kategoriye bağlı hiçbir ürün yoksa kategori silinebilir.

create trigger TriggerAdi on Kategoriler instead of delete
as
begin

Declare @katID int,@adet int

select @katID=KatID from deleted
select @adet=COUNT(*) from Urunler where UrunKatID=@katID

if(@adet=0)
delete from Kategoriler where KatID=@katID
else
update Kategoriler set Aktif=0 where KatID=@katID

end

Ne yaptığımızı açığa kavuşturalım şimdi.

1.Satır
Burada trigger oluşturup adını yazdık ve bağlı olacağı tabloyu belirttik, daha sonra trigger in ne zaman tetikleneceğini belirttik (instead of delete, yani veri silinmeden önce, eğer after of delete yapsaydık, veri silindikten sonra tetiklenecekti)
5.Satır
İki tane değişken tanımladık. Bu değişkenlerde silinmek istenen verinin değerlerini saklayacağız.
7.Satır
Burada katID değişkenine silinen satırdaki KatID kolonunu atıyoruz. Burada silinmek istenen kolona nasıl ulaşacağımıza gördük, from deleted ile
8.Satır
adet değişkenine silinmek istenen kategoriye bağlı kaç ürünün olduğunu atadık
10-13.Satır
Eğer 0 adet varsa kategorinin silinmesini istedik.
Else ile de kategoriyi pasif hale getirdik.

NOT : Eğer biz burada silme/değiştirme işlemi yapmasaydık, veriler silinmeyecekti aynen olduğu gibi kalacaktı.

Tags: , , , , , ,

2 Comments

  1. Güzel ve açıklayıcı olmuş.Eline sağlık.

  2. Elinize sağlık, çok basit ve anlaşılır bir açıklama olmuş, bu yapıyı ilk kez kullanacaklar için.

Yorum yaz

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Ads