T-SQL Trigger(tetikleyici) Örnekleri

Merhabalar ,
Bu yazımda trigger örnekleriyle SQL Serverda trigger yapısını anlatmaya çalışacağım. Öncelikle Triggerın ne olduğu ile başlayalım. Triggerlar tabloya bağlı olarak yazılan ve o tabloya yapılan herhangi bir işlemden sonra yapılmasını istediğimiz işlemleri yazdığımız saklı yordamlardır. Aşağıdaki örnekler ile birlikte  kafanızda netleşeceğini umuyorum. Örneklerde Northwind veri tabanını kullanacağım.

--sipariş edilen ürün kadar stoktan düşüren eğer stokta yeteri kadar ürün yoksa işlemi geri alıp yeteri kadar ürün yoktur uyarısı veren trigger.

CREATE trigger [dbo].[trg_stokDusur]
on [dbo].[Order Details]
after insert
as
begin
begin tran
declare @adet int,@productID int,@stok int
select @adet=i.Quantity,@productID=i.ProductID from inserted i
select @stok=p.UnitsInStock from Products p where p.ProductID=@productID

if(@adet<=@stok and @stok>0)
begin
update Products
set UnitsInStock=UnitsInStock-@adet
where ProductID=@productID
commit
end
else
begin print 'girilen ürün miktarını stok karşılamıyor'
rollback
end
end


--Sipariş tablosunda iptal edilen sipariş ile ilgili stok miktarı products tablosuna geri eklensin

create trigger siparis_iptal
on [Order Details]
--burada trigger'ın delete işleminden sonra çalışacağını belirtiyoruz
after delete
as
begin
--değişkenlerimizi tanımlayıp bu değişkenlere silinen satırın değerlerini atıyoruz.
declare @stok int,@ID int
select @ID=ProductID,@stok=Quantity from deleted
--ve gerekli update işlemini yazıyoruz
update Products
set UnitsInStock=UnitsInStock+@stok
where ProductID=@ID
end

--Güncellenen fiyatı kontrol eden ve güncellenen fiyat eski fiyattan düşükse işlemi yapmayan trigger.

CREATE trigger [dbo].[trg_fiyatKontrol]
on [dbo].[Products]
instead of update
as
begin
declare @productID int,@eski money ,@yeni money
select @eski=UnitPrice from deleted
select @yeni=UnitPrice from inserted
select @productID=ProductID from deleted
if(@eski>@yeni)
begin
print 'güncelleme yapılamadı'
select from deleted
select 
from inserted
end
else
begin
update Products
set UnitPrice=@yeni where ProductID=@productID
end
end





Yorumlar

Bu blogdaki popüler yayınlar

Excel VBA ile Farklı Excel Dosyalarını Bir Excelde Birleştirmek

SQL ROW_NUMBER() ile Tekrarlı Satırları Silmek