Veritabanında belirlenen bir işleme bağlı olarak başka işlemlerin gerçekleştirilmesi gerekliliği varsa, bu işlemler trigger sayesinde yapılır. Yani bir tabloda değiştirilen veri diğer tablodaki bazı satırlarında değişmesini sağlayacaksa,olayın gerçekleşmesinde triggerlar kullanılır. Bir ürünümüz için sipariş verildi diyelim. Siparişler tablosuna sipariş girildiğinde ürünler tablosundan stokdaki ürün sayısı sipariş miktarı düşecektir yada yapılan herhangi bir güncelleme diğer tablolarda da güncelleme gereği doğuracaktır. Triggerlar bu işlemlerin yapılmasını sağlayan bir çeşit fonksiyon gibi düşünebiliriz. Ancak fonksiyon gibi çağrılmaları yoktur, işlemler arka planda otomatik olarak yapılacaktır. DML(insert,update,delete) vd DDL(alter.drop) olmak üzere 2 çeşit trigger tipimiz vardır. Bu yazıda DML trigger için giriş yapmış olacağız. Diğer yazılarda daha ayrıntılı olarak bahsedeceğiz.
Northwind’ de Order Detail tablosuna bir teklif girdiğimizde Products tablosundaki UnitsInStock kısmından girdiğimiz veri kadar düşme yapan trigger yazalım.
Sorguyu çalıştırmadan önce;
Urunkodunu ve siparis adedini dışardan alan order detailse insert yapılacağı zaman, Products tablosunu güncelleyen trigger yazdık.
--create trigger triggeradi --on hangi tablo --for hangi sorgu as --begin --islemler --end create trigger SiparisVer on [Order Details] for insert as begin declare @urunkodu int, @siparisadedi int select @urunkodu=ProductID, @siparisadedi=Quantity from inserted update Products set UnitsInStock-=@siparisadedi where ProductID=@urunkodu end insert [Order Details] (OrderID,ProductID,Quantity) values (10628,11,5)
Yanlış girilen sipariş sonucu Order’ı silmemiz sonucu Product tablosunu eski haline güncelleyen trigger yazdık.
create trigger Siparisİptal on [Order Details] for delete as begin declare @urunkodu int, @siparisadedi int select @urunkodu=ProductID, @siparisadedi=Quantity from deleted update Products set UnitsInStock+=@siparisadedi where ProductID=@urunkodu end delete [Order Details] where OrderID=10628