SQL Server – Tetikleyici (Trigger) Nedir?

MSSQL’de orijinal adı trigger olan tetikleyiciler ile otomatikleştirilmiş işlemlerin yapılması mümkün hale gelmektedir. Tetikleyiciler ile bir tablo üzerindeki bazı eylemlerin sonrasında veya bu komut yerine yapılması gereken diğer işlemler veritabanı yönetim sistemi tarafından gerçekleştirilir.

Bir tablo üzerinde INSERT, UPDATE ve DELETE gibi SQL komutlarıyla birlikte otomatik olarak yapılması istenen işlemler için kullanılan tetikleyicilerin zamanlamasını da ayarlamak mümkündür.

Tetikleyiciler Nerede Kullanılır?

Tetikleyiciler, belirli bir komut ile birlikte otomatik bir şekilde yaptırılması istenen yerlerde kullanılabilir. En güzel örnek ise bir mağaza, market gibi stok yönetimi yapılması gereken yerlerde faturaya ürün eklenmesinin ardından ilgili ürünün stoktan düşülmesi, fatura ürün eklendikçe ve çıkarıldıkça fatura tutarının otomatik hesaplanması (ki bu alan için calculated veya computed column dediğimiz hesaplanmış sütun kullanmak da düşünülebilir!) gibi işlemlerde sıklıkla kullanılır.

Tetikleyici oluşturmak için yazılan komut şu şekildedir:

Yukarıdaki tetikleyici oluşturma komutunda komut ile belirtilen kısımda INSERT, UPDATE veya DELETE ifadelerinin biri veya birkaçı gelebilir. AFTER ve FOR anahtar kelimeleri birbirinin yerine kullanılabilir.

Tetikleyici Türleri

Tetikleyicilerde, zamanlamaya göre iki farklı kullanım mevcuttur. Belirtilen komutların sonrasında veya belirtilen komutların yerine çalışmayı ifade edecek şekilde AFTER ve INSTEAD OF deyimleri kullanılır.

Tetikleyicide AFTER ve FOR Deyimleri

MSSQL üzerinde AFTER ve FOR deyimleri arasında herhangi bir fark yoktur. İkisi de INSERT, UPDATE veya DELETE komutlarından hemen sonra gerçekleştirilmesi istenen işlemlerin ifadesi için kullanılır.

Tetikleyicide INSTEAD OF Deyimi

MSSQL üzerinde INSERT, UPDATE veya DELETE komutlarının yerine gerçekleştirilmesi istenen işlemlerde kullanılan deyimdir.

INSERTED ve DELETED Tabloları

Bir tetikleyicinin çalışmasıyla birlikte INSERTED veya DELETED adında, normalde veritabanı içinde bulunmayan sanal tablolar oluşturulur. INSERTED tablosunda yeni değerler, DELETED tablosunda ise eski değerler tutulur.

FOR INSERT, AFTER INSERT veya INSTEAD OF INSERT Kullanımı

INSERT için bir tetikleyici yazıldığında yalnızca INSERTED tablosu oluşturulur. Çünkü INSERT komutu ile sadece veri eklenebilir, dolayısıyla bu veriler INSERTED geçici tablosunda tutulur.

FOR DELETE, AFTER DELETE veya INSTEAD OF DELETE Kullanımı

DELETE için bir tetikleyici yazıldığında yalnızca DELETED tablosu oluşturulur. Çünkü DELETE komutu ile sadece veri silinebilir, dolayısıyla bu veriler DELETED geçici tablosunda tutulur.

FOR UPDATE, AFTER UPDATE veya INSTEAD OF UPDATE Kullanımı

UPDATE için bir tetikleyici yazıldığında INSERTED ve DELETED tabloları aynı anda oluşturulur. INSERT komutu ile güncelleme yapıldığından aslında eski ve yeni veriler söz konusu olur. Eski verilerle işlem yapmak istediğimizde DELETED tablosu, yeni verilerle işlem yapılmak istendiğinde ise INSERTED tablosu ile işlem yapılır.

Yukarıda fatura_tutar_guncelle adında bir tetikleyici oluşturulmuştur. Bu tetikleyici fatura_detay tablosu üzerinde INSERT komutundan sonra çalışacak şekilde tasarlanmışlardır. DECLARE anahtar kelimesi ile değişken tanımlaması yapılmıştır. INSERTED tablosundan fatura_no bilgisi bu değişkene aktarılmış ve fatura tutarını güncelleme aşamasında kullanılmıştır.

About Hürkal HÜSEM

2010 yılından bu yana Bilişim Teknolojileri Öğretmeni olarak meslek liselerinde görev yapmaktayım.

View all posts by Hürkal HÜSEM →

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.