Trigger create, update, delete, insert işlemlerinden sonra yapılmasını istediğimiz işlerin bilgisini tutan ve tetiklendiğinde yapması gereken işleri sırayla yapan tetikleyicilerdir. Trigger lar tablolara veritabanına ve server a yazılabilir.
Trigger yazarken önce trigger ismi ardından çalışmasını istediğimiz yer, sonrasında hangi işlem için çalışmasını istediğimizi belirtiyoruz ve begin end blogları içerisinde yapmasını istediğimiz işlemi yazıyoruz.
Örnek olarak bir tabloya trigger yazalım ve yeni bir öğrenci eklendiğinde o öğrenci YedekOgrenci tablosunada eklensin :
--İnsert trigger
create trigger InsertTrigger
on ogrenciler
for insert
as
begin
--Değerleri Tütabilmek için değişken tanımlıyoruz.
declare @OgrenciId int
declare @OgrenciAd nvarchar(30)
declare @OgrenciSoyad nvarchar(30)
--Insert işlemi sırasında ulaşmak istediğimiz değerleri alıyoruz
select @OgrenciId=Id,@OgrenciAd=Ad,@OgrenciSoyad=Soyad from inserted
--Ve değişkenlere atadığımız yeni değerleri YedekOgrenci tablomuza ekliyoruz.
insert into YedekOgrenci(Id,Ad,Soyad) values(@OgrenciId,@OgrenciAd,@OgrenciSoyad)
end
Begin end blogları içerisinde yaptığımız işlem insert işleminin ardından gerçekleşecektir, istersek insert işlemini iptal de edebiliriz ekleme yapan user'ın yetkisinide begin end blogları arasında kontrol edebiliriz.
--Şimdi yeni bir öğrenci ekleyelim ve yedek öğrenciler tablosunu
sorgulayalım
insert into ogrenciler(Ad,Soyad) values('Ahmet','Ateş')
-- YedekOgrenci tablosundaki öğrencinin Id'si Ogrenciler tablosunda aldığı Id ile aynı oldu bunu triggerı yazarken belirttik.
select * from YedekOgrenci
--Yeni eklediğimizin Id numarası 9 olarak YedekOgrenciler tablosuna kaydedilmiş oldu.
--Delete trigger
create trigger DeleteTrigger
on ogrenciler
for delete
as
begin
--Değerleri Tütabilmek için değişken tanımlıyoruz.
declare @OgrenciId int
declare @OgrenciAd nvarchar(30)
declare @OgrenciSoyad nvarchar(30)
-- Silinen kaydın id numarasını "deleted" komutu ile aldık.
select @OgrenciId=Id from deleted
--Id'si silinen öğrenciye eşit olan öğrencinin YedekOgrenci tablosundan silinme işlemide bu satırda yapılıyor.
delete from YedekOgrenci where Id=@OgrenciId
--Birde işlemlerin gerçekleştiğini haber vericek bir yazı yazdıralım.
print 'işlemler gerçekleştirildi'
end
--ogrenciler tablosundan Id'si 9 olan öğrenciyi silelim.
delete from ogrenciler where Id=9
--ogrenci tablosundan 9 id'li öğrenci silindi ve aynı zamanda YedekOgrenci tablosundan da 9 id'li öğrenci silindi.
--Uptade Trigger
create trigger UpdateTrigger
on ogrenciler
for update
as
begin
--Değerleri Tütabilmek için değişken tanımlıyoruz.
declare @OgrenciId int
declare @OgrenciAd nvarchar(30)
declare @OgrenciSoyad nvarchar(30)
-- Update işleminde aslında arka planda önce delete sonra insert çalışır bu yüzden "updated" yoktur inserted ile güncellemeyi yakalayabiliriz.
select @OgrenciId=Id,@OgrenciAd=Ad,@OgrenciSoyad=Soyad from inserted
update YedekOgrenci set Id=@OgrenciId,Ad=@OgrenciAd,Soyad=@OgrenciSoyad where Id=@OgrenciId
print 'işlemler gerçekleştirildi'
end
--Id'si 11 olan öğrencinin bilgilerini güncelleyelim ve YedekOgrenci tablosundada aynı güncellemenin yapıldığını görelim
update ogrenciler set Ad='YeniMetin',Soyad='YeniDemir' where Id=11
--öğrencinin bilgileri 2 tablodada değiştirilmiş oldu
select * from YedekOgrenci
Begin End blokları içerisinde istediğiniz koşul sorgulamasını yapabilirsiniz yapılan işlemin istenen değerde olup olmadığını kontrol edip uygun olmayan kaydın işlemini engelleyebilirsiniz.
Hiç yorum yok:
Yorum Gönder