{"id":1331,"date":"2015-01-03T07:33:57","date_gmt":"2015-01-03T05:33:57","guid":{"rendered":"http:\/\/www.ozgurguler.net\/blog\/?p=1331"},"modified":"2015-11-03T07:34:19","modified_gmt":"2015-11-03T05:34:19","slug":"mssqlde-trigger-yazma","status":"publish","type":"post","link":"https:\/\/www.ozgurguler.net\/blog\/mssqlde-trigger-yazma\/","title":{"rendered":"MSSQL\u2019de trigger yazma"},"content":{"rendered":"<address>Trigger kelime anlam\u0131 olarak tetikleyici demektir. Trigger, SQL\u2019de bir sorgu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda, ba\u015fka bir sorgunun \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak i\u00e7in yaz\u0131lan koddur. Mesela bir tablodan kay\u0131t sildi\u011fimizde, ba\u015fka bir tablodan onunla ilgili bir kayd\u0131n silinmesi i\u00e7in kullanabiliriz. Yada bir tabloya eklem yapt\u0131\u011f\u0131m\u0131zda ba\u015fka bir tabloya da onunla ilgili olan bilgileri eklemek iin kullanabiliriz. \u00dc\u00e7 farkl\u0131 i\u015flem i\u00e7in trigger vard\u0131r. Bunlar; insert, update, delete sorgular\u0131 i\u00e7indir. \u00d6rnek verdi\u011fimiz zaman daha iyi anlayacaks\u0131n\u0131z.<\/address>\n<p>\u00a0<!--more--><\/p>\n<p>1-\u0130nsert i\u00e7in trigger:<\/p>\n<p>Bir tabloya kay\u0131t ekledi\u011fimizde ba\u015fka bir tabloda kendili\u011finden bir i\u015flemin ger\u00e7ekle\u015fmesi i\u00e7in yaz\u0131l\u0131r. A\u015fa\u011f\u0131da bunun i\u00e7in bir \u00f6rnek vard\u0131r beraber inceleyelim. Bu trigger, satis isimli tabloya ekleme yapt\u0131\u011f\u0131m\u0131zda, urunler isimli tablodan, sat\u0131lan \u00fcr\u00fcn\u00fcn say\u0131s\u0131n\u0131 yap\u0131lan sat\u0131\u015f kadar azaltmak i\u00e7in kullan\u0131lmaktad\u0131r.<\/p>\n<p>create trigger stokGuncelle on satis \u2013bu sat\u0131rda trigger ad\u0131n\u0131 yaz\u0131yoruz ve tetiklemenin kayna\u011f\u0131 olan tabloyu yaz\u0131yoruz.<\/p>\n<p>for insert \u2013 trigger\u2019\u0131n hangi komut i\u00e7in yaz\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6sterir.<br \/>\nas<br \/>\nbegin<\/p>\n<p>declare @satisAdedi int, @urunid int \u2013 iki adet de\u011fi\u015fken belirliyoruz.<\/p>\n<p>select @satisAdedi=satisadedi, @urunid=urunid from inserted \u2013yapt\u0131\u011f\u0131m\u0131z insert i\u00fe\u015feminde satisadedi ve urunid de\u011ferlerini al\u0131p bunlar\u0131 daha \u00f6nce belirledi\u011fimiz de\u011fi\u015fkenlere at\u0131yoruz.<\/p>\n<p>update urunler set stokadedi=stokadedi\u2013@satisAdedi where urunid=@urunid \u2013\u015fimdi ald\u0131\u011f\u0131m\u0131z de\u011fi\u015fkenleri ba\u015fka bir tabloda de\u011fi\u015fiklik yapmak i\u00e7in kullan\u0131yoruz.<\/p>\n<p>end<\/p>\n<p>2- Update i\u00e7in tirgger:<\/p>\n<p>Bir tabloda g\u00fcncellemede yapt\u0131\u011f\u0131m\u0131zda ba\u015fka bir tabloda da g\u00fcncelleme yapmak i\u00e7in kullan\u0131l\u0131r. Burada dikkat edilmesi gereken, update i\u015fleminin \u00e7al\u0131\u015fma mant\u0131\u011f\u0131d\u0131r. Asl\u0131nda direkt olarak update diye bir\u015fey yoktur. Update asl\u0131nda iki basamakta ger\u00e7ekle\u015fir. Birinci ad\u0131mda g\u00fcncelleme yapaca\u011f\u0131m\u0131z sat\u0131r silinir, ikinci ad\u0131mda ise o sat\u0131r yeniden eklenir ama bu sefer g\u00fcncel de\u011ferleri eklenir. \u015eimdi tirgger kodumuzu inceleyelim.<\/p>\n<p>create trigger duzelt on satis<\/p>\n<p>for update\u2013 update i\u015flemi ile tetiklemenin ba\u015flat\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6sterir.<br \/>\nas<br \/>\nbegin<br \/>\ndeclare @yenisatisadedi int, @satisadedi int, @urunid int<\/p>\n<p>select @satisAdedi=satisadedi, @urunid=urunid from deleted \u2013silme i\u015fleminde silinen sat\u0131rdaki satisadedi ve urunid de\u011ferlerini al\u0131yoruz.<\/p>\n<p>select @yenisatisadedi=satisadedi , @urunid=urunid from inserted \u2013ekleme i\u015fleminde eklenen satisadedi ve urunid de\u011ferlerini al\u0131yoruz.<\/p>\n<p>if(@yenisatisadedi&lt;@satisadedi) \u2013e\u011fer eklenen satisadedi de\u011feri silinen satisadedi de\u011ferinden k\u00fc\u00e7\u00fck ise i\u015flem yapar. yani g\u00fcncelleme yapt\u0131\u011f\u0131m\u0131z de\u011fer eski de\u011ferden az ise.<\/p>\n<p>begin<\/p>\n<p>update urunler set stokadedi=stokadedi-(@satisadedi\u2013@yenisatisadedi)where urunid=@urunid \u2013 \u00fcr\u00fcnlerdeki stokadedini g\u00fcncelleme yapt\u0131\u011f\u0131m\u0131zda satisadedi de\u011ferindeki de\u011fi\u015fim kadar azalt\u0131r.<\/p>\n<p>end<\/p>\n<p>else<\/p>\n<p>begin<\/p>\n<p>update urunler set stokadedi=stokadedi+(@yenisatisadedi\u2013@satisadedi)<\/p>\n<p>where urunid=@urunid\u2013 \u00fcr\u00fcnlerdeki stokadedi&#8217;ni g\u00fcncelleme yapt\u0131\u011f\u0131m\u0131zda satisadedi de\u011ferindeki de\u011fi\u015fim kadar art\u0131r\u0131r.<\/p>\n<p>end<\/p>\n<p>end<br \/>\nBu kod ile, sat\u0131\u015f tablosunda bir sat\u0131r\u0131 g\u00fcncelledi\u011fimizde, \u00fcr\u00fcnler tablosunda o \u00fcr\u00fcn\u00fcn stok adedi de\u011fi\u015ftiriliyor. Yukar\u0131da update i\u015fleminin iki basamakta ger\u00e7ekle\u015fti\u011fini s\u00f6ylemi\u015ftik. Kodda da g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi ilk olarak silme i\u015fleminde silinen de\u011ferleri al\u0131yoruz. Daha sonra ekleme i\u015fleminde eklenen de\u011ferleri de yeni de\u011ferler olarak al\u0131yoruz. Sonra bu de\u011ferleri kar\u015f\u0131la\u015ft\u0131rarak de\u011fi\u015fim miktar\u0131na g\u00f6re \u00fcr\u00fcnlerdeki stok adedini de g\u00fcncelliyoruz.<\/p>\n<p>3- Delete i\u00e7in tirgger:<\/p>\n<p>Bu trigger da bir tabloda silme i\u015flemi ger\u00e7ekle\u015fti\u011fine ba\u015fka bir tabloda de\u011fi\u015fiklik yamak i\u00e7in kullan\u0131l\u0131r. A\u015fa\u011f\u0131daki kodda sat\u0131\u015f tablosundan bir sat\u0131r\u0131 sildi\u011fimizde \u00fcr\u00fcnler tablosunda de\u011fi\u015fiklik yap\u0131l\u0131yor. Mesela bir \u00fcr\u00fcn\u00fcn sat\u0131\u015f\u0131n\u0131 yapt\u0131n\u0131z ve sat\u0131\u015f yapt\u0131\u011f\u0131n\u0131z anda \u00fcr\u00fcn\u00fcn stok adedini azaltt\u0131n\u0131z. Ama bir aksilik \u00e7\u0131kt\u0131 sat\u0131\u015f\u0131 iptal ettiniz bu durumda \u00fcr\u00fcn\u00fc yeniden sto\u011fa eklemeniz gerekmektedir. A\u015fa\u011f\u0131daki kod da bu i\u015fe yaramaktad\u0131r.<\/p>\n<p>create trigger iptalEt on satis<\/p>\n<p>for delete<br \/>\nas<br \/>\negin<\/p>\n<p>declare @satisAdedi int, @urunid int<\/p>\n<p>select @satisAdedi=satisadedi, @urunid=urunid from deleted \u2013 silinen satisadedi ve urunid de\u011ferlerini al\u0131yoruz.<\/p>\n<p>update urunler set stokadedi=stokadedi+@satisAdedi \u2013sat\u0131\u015f tablosundan silinen \u00fcr\u00fcn miktar\u0131 kadar \u00fcr\u00fcn\u00fc \u00fcr\u00fcnler tablosunda ekliyoruz.<\/p>\n<p>where urunid=@urunid<\/p>\n<p>end<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Trigger kelime anlam\u0131 olarak tetikleyici demektir. Trigger, SQL\u2019de bir sorgu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda, ba\u015fka bir sorgunun \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak i\u00e7in yaz\u0131lan koddur. Mesela bir tablodan kay\u0131t sildi\u011fimizde, ba\u015fka bir tablodan onunla ilgili bir kayd\u0131n silinmesi i\u00e7in kullanabiliriz. Yada bir tabloya eklem yapt\u0131\u011f\u0131m\u0131zda ba\u015fka bir tabloya da onunla ilgili olan bilgileri eklemek iin kullanabiliriz. \u00dc\u00e7 farkl\u0131 i\u015flem i\u00e7in trigger [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"class_list":["post-1331","post","type-post","status-publish","format-standard","hentry","category-sql-server-tsql"],"_links":{"self":[{"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/posts\/1331","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/comments?post=1331"}],"version-history":[{"count":1,"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/posts\/1331\/revisions"}],"predecessor-version":[{"id":1332,"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/posts\/1331\/revisions\/1332"}],"wp:attachment":[{"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/media?parent=1331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/categories?post=1331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/tags?post=1331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}