MS SQL TRIGGERLAR -UPDATE ve DELETE İşlemleri

MS SQL TRIGGERLAR -UPDATE ve DELETE İşlemleri
11 Şubat 2015SQL

Merhabalar, Bu yazımda triggerlarda update ve delete ile ilgili genel bir bilgilendirme yapacağım. Öncelikle bir tabloda oluşturduğumuz trigger ın AFTER ifadesinden sonra bulunan kısmında biz hangi işlemden sonra hangi işlemi yaptığımızı belirtebiliyorduk. AFTER INSERT deyip insert işleminden sonra kodların çalışmasını istediğimiz gibi AFTER DELETE ile silme AFTER UPDATE ile de güncelleme işlemlerinden sonra çalışmasını isteyebilirdik. önceki yazımda trigger işlemlerinin ne yaptığı ne işe yaradığından bahsetmiştik. Keza trigger ları sadece tek işlemle çalıştırmak yerine INSERT,DELETE gibi belirteçleri beraber kullanarak da kullanabiliriz. Önceki yazımda bahsettiğim gibi trigger larda eklenmiş olan bir satırdaki verilere ulaşmak için aşağıdaki kod yapısını kullanabiliyorduk. 
 

select @id=inserted.id from inserted;

burada bize eklenen satırdaki elemanları getiren ve bizi döngüler kullanıp elemanı aramaya zorlanmamızı önleyen bir yapı vardır. inserted gibi sistemlerimizde deleted yapısı da kullanılabilmektedir. Yani silme işlemi yaptığımızda sildiğimiz satır elimizden gitmeden o satırdaki verilere erişebiliyoruz. Peki update işleminde ne kullanacağız?

SQL de update işlemi mantık olarak şu şekilde işler. Önce o satır silinir sonra güncellenmiş olan satır o satırın bulunduğu satıra yazılır. Tabi ki biz sadece güncellenme kısımlarını görürüz. Trigger larda da bu mantıkla baktığımız zaman şöyle bir sistem kullanılabilmektedir. Örneğin siz update işlemini yaptığınız satırdaki değişiklikten önceki verilere ulaşmak istiyorsanız deleted ; değişiklikten sonraki verilere ulaşmak istiyorsanız inserted kullanabilirsiniz. Bunu bir örnekle açıklayalım isterseniz. 
 

CREATE TRIGGER trGuncelle ON [adsoyad]
AFTER UPDATE
AS
BEGIN
declare @eski_ad nvarchar(150);
declare @eski_soyad nvarchar(150);
declare @yeni_ad nvarchar(150);
declare @yeni_soyad nvarchar(150);
select @yeni_ad=inserted.ad,@yeni_soyad=inserted.soyad from inserted;
select @eski_ad=deleted.ad,@eski_soyad=deleted.soyad from deleted;
print 'Güncellemeden Önceki Ad Soyad'+@eski_ad+' '+@eski_soyad
print 'Güncellemeden Sonraki Ad Soyad'+@yeni_ad+' '+@yeni_soyad
END
GO

Yukarıdaki kod ile önce deleted satırından güncellenmeden önceki verileri aldık. Daha sonra inserted ile de güncellendikten sonraki halini. print ler ile yazdığımız diyalogların çıktısı aşağıdaki gibidir.
 

UPDATE adsoyad set ad='WESLEY' , soyad='SNEIJDER' where id=7
/* İşlemden sonraki sonuçlar */
Güncellemeden Önceki Ad SoyadEnder Ariç
Güncellemeden Sonraki Ad SoyadWESLEY SNEIJDER
(1 row(s) affected)

Görüldüğü gibi trigger işlemleri bu kadar basit. Birkaç tecrübeme dayanarak söylemek isterim ki sistemlerm bu triggerlar sayesinde inanılmaz bir performans farkı gösterdiler.

2131 Görüntülenme sayısı

BİR YORUM YAZIN

Bilgileriniz Güvende!E-Posta adresiniz ve diğer bilgileriniz kimseyle paylaşılmayacaktır.