ms-sql'de trigger kayışı kullanmak istersek

Bir tablodan diğer tabloya bilgi aktarmak için kullandığımız kurallar

Amplify’d from www.yakupbugra.com

Trigger kelime anlamı olarak tetikleyici demektir. Trigger, SQL’de bir sorgu çalıştırdığımızda, başka bir sorgunun çalışmasını sağlamak için yazılan koddur. Mesela bir tablodan kayıt sildiğimizde, başka bir tablodan onunla ilgili bir kaydın silinmesi için kullanabiliriz. Yada bir tabloya eklem yaptığımızda başka bir tabloya da onunla ilgili olan bilgileri eklemek iin kullanabiliriz. Üç farklı işlem için trigger vardır. Bunlar; insert, update, delete sorguları içindir. Örnek verdiğimiz zaman daha iyi anlayacaksınız.

Trigger kelime anlamı olarak tetikleyici demektir. Trigger, SQL’de bir sorgu çalıştırdığımızda, başka bir sorgunun çalışmasını sağlamak için yazılan koddur. Mesela bir tablodan kayıt sildiğimizde, başka bir tablodan onunla ilgili bir kaydın silinmesi için kullanabiliriz. Yada bir tabloya eklem yaptığımızda başka bir tabloya da onunla ilgili olan bilgileri eklemek iin kullanabiliriz. Üç farklı işlem için trigger vardır. Bunlar; insert, update, delete sorguları içindir. Örnek verdiğimiz zaman daha iyi anlayacaksınız.
1-İnsert için trigger:

        Bir tabloya kayıt eklediğimizde başka bir tabloda kendiliğinden bir işlemin gerçekleşmesi için yazılır. Aşağıda bunun için bir örnek vardır beraber inceleyelim. Bu trigger, satis isimli tabloya ekleme yaptığımızda, urunler isimli tablodan, satılan ürünün sayısını yapılan satış kadar azaltmak için kullanılmaktadır.

create trigger stokGuncelle on satis –bu satırda trigger adını yazıyoruz ve tetiklemenin kaynağı olan tabloyu yazıyoruz.


for insert – trigger’ın hangi komut için yazıldığını gösterir.

as

begin


   declare @satisAdedi int, @urunid int – iki adet değişken belirliyoruz.


   select @satisAdedi=satisadedi, @urunid=urunid from inserted –yaptığımız insert iþşeminde satisadedi ve urunid değerlerini alıp bunları daha önce belirlediğimiz değişkenlere atıyoruz.


   update urunler set stokadedi=stokadedi-@satisAdedi where urunid=@urunid –şimdi aldığımız değişkenleri başka bir tabloda değişiklik yapmak için kullanıyoruz.


end

2- Update için tirgger:

        Bir tabloda güncellemede yaptığımızda başka bir tabloda da güncelleme yapmak için kullanılır. Burada dikkat edilmesi gereken, update işleminin çalışma mantığıdır. Aslında direkt olarak update diye birşey yoktur. Update aslında iki basamakta gerçekleşir. Birinci adımda güncelleme yapacağımız satır silinir, ikinci adımda ise o satır yeniden eklenir ama bu sefer güncel değerleri eklenir. Şimdi tirgger kodumuzu inceleyelim.

create trigger duzelt on satis


for update– update işlemi ile tetiklemenin başlatıldığını gösterir.

as

begin


      declare @yenisatisadedi int, @satisadedi int, @urunid int


      select @satisAdedi=satisadedi, @urunid=urunid from deleted –silme işleminde silinen satırdaki satisadedi ve urunid değerlerini alıyoruz.


      select @yenisatisadedi=satisadedi , @urunid=urunid from inserted –ekleme işleminde eklenen satisadedi ve urunid değerlerini alıyoruz.


      if(@yenisatisadedi<@satisadedi) –eğer eklenen satisadedi değeri silinen satisadedi değerinden küçük ise işlem yapar. yani güncelleme yaptığımız değer eski değerden az ise.


      begin


            update urunler set stokadedi=stokadedi-(@satisadedi-@yenisatisadedi) where urunid=@urunid – ürünlerdeki stokadedini güncelleme yaptığımızda satisadedi değerindeki değişim kadar azaltır.


      end


      else


      begin


            update urunler set stokadedi=stokadedi+(@yenisatisadedi-@satisadedi)


            where urunid=@urunid– ürünlerdeki stokadedi'ni güncelleme yaptığımızda satisadedi değerindeki değişim kadar artırır.


      end


end

 

        Bu kod ile, satış tablosunda bir satırı güncellediğimizde, ürünler tablosunda o ürünün stok adedi değiştiriliyor. Yukarıda update işleminin iki basamakta gerçekleştiğini söylemiştik. Kodda da görüldüğü gibi ilk olarak silme işleminde silinen değerleri alıyoruz. Daha sonra ekleme işleminde eklenen değerleri de yeni değerler olarak alıyoruz. Sonra bu değerleri karşılaştırarak değişim miktarına göre ürünlerdeki stok adedini de güncelliyoruz.

 

3- Delete için tirgger:

        Bu trigger da bir tabloda silme işlemi gerçekleştiğine başka bir tabloda değişiklik yamak için kullanılır. Aşağıdaki kodda satış tablosundan bir satırı sildiğimizde ürünler tablosunda değişiklik yapılıyor. Mesela bir ürünün satışını yaptınız ve satış yaptığınız anda ürünün stok adedini azalttınız. Ama bir aksilik çıktı satışı iptal ettiniz bu durumda ürünü yeniden stoğa eklemeniz gerekmektedir. Aşağıdaki kod da bu işe yaramaktadır.

create trigger iptalEt on satis


for delete

as

egin


      declare @satisAdedi int, @urunid int


      select @satisAdedi=satisadedi, @urunid=urunid from deleted – silinen satisadedi ve urunid değerlerini alıyoruz.


      update urunler set stokadedi=stokadedi+@satisAdedi –satış tablosundan silinen ürün miktarı kadar ürünü ürünler tablosunda ekliyoruz.


      where urunid=@urunid


end

Read more at www.yakupbugra.com
 

Yorumlar

Bu blogdaki popüler yayınlar

22.06.2020 - 26.06.2020 arası işler

Asp.net RestSharp ile data post etmek

List Box Item içindeki elemanları aşağı veya yukarı taşımak