Jump to content

Ms Sql Server'da Trigger Kullanımı


wmismail

Recommended Posts

Bu tür tablolar üzerinde çalışan triggerlara DML (Data Manipulation Language) triggerlar adı verilir. SQL Server 2005 ile DDL (Data Definiton Language) trigger adı verilen 2. bir trigger biçimi karşımıza geldi. DDL triggerlar Drop, Alter, Create gibi işlemler öncesinde veya sonrasında otomatik olarak çalıştırılarak yapılan işlemleri kontrol altına almamızı sağlıyor. DDL triggerlar yardımı ile örneğin veritabanından bir tablonun silinmesini engelleyebiliriz.

Triggerlar çalışma şekli açısından transaction ile benzerlik gösterir.

Herhangi bir tablo üzerine trigger tanımladığımız zaman tabloya gönderilen komutlar (insert, update, delete) işletilmeden önce bir transaction başlar. Daha sonra tabloya gönderilen komut işletilir. Üçüncü olarak trigger içerisine yazdığımız komutlar çalıştırılır. Son olarak yapılan işlem geçerli ise transaction commit olur, işlem geçersiz bulunursa RollBack Transaction ile yapılan işlemler iptal edilir.

Trigger Oluşturma:

Yeni bir trigger oluşturmak için aşağıdaki yapıyı kullanabiliriz.

CREATE TRIGGER /*TriggerAdı*/ ON /*TabloAdı*/ 
AFTER INSERT,DELETE,UPDATE
AS
BEGIN
/*Yazmak istediğimiz sql komutları*/
END[/CODE]

Birinci satırda oluşturulacak triggerın hangi tablo için geçerli olacağı belirtiliyor, ikinci satırda ise triggerın hangi işlemler için çalıştırılacağı tanımlanıyor. Burada kullanılan AFTER sözcüğü triggerın tabloya kayıt eklendikten (silindikten veya güncellendikten) sonra çalıştırılacağını belirtiyor. After yerine Instead Of cümleside kullanılır ise trigger kayıt eklenmeden (silinmeden veya güncellenmeden) önce çalştırılır. Instead Of olarak tanımlanmış bir triggerda tabloya bir kayıt otomatik olarak eklenmez, ekleme işlemini trigger içerisinde bizim yapmamız gerekir. Yine ikinci satırda bulunan INSERT, UPDATE ve DELETE sözcükleri ise tablodaki hangi işlemlerde bu triggerın çalıştırılacağını belirler. Sadece DELETE yazarsak trigger tablodan kayıt silinmesi durumunda tetiklenecektir.

Bir tablo üzerinde trigger oluşturulmuş ise o tablo ile aynı yapıda 2 tane tablo SQL server tarafından tanımlanır. Bunlara INSERTED ve DELETED tablolar denir.

Trigger konusunun daha iyi anlaşılabilmesi için örnek olarak ürün tablomuzdan bir kayıt silindiğinde debug tablosuna silinen ürünü kaydeden bir trigger yazalım.

[CODE]CREATE TRIGGER tr_UrunSil ON Urunler
AFTER DELETE
AS
BEGIN
INSERT INTO Debug SELECT 'Ürün Silindi : ' + CONVERT(Varchar,UrunID) + ', ' + UrunAdi FROM DELETED
END[/CODE]

Tanımlı olan triggerları aşağıdaki sql cümleleri ile enable veya disable edebiliriz.

[CODE]DISABLE TRIGGER tr_UrunSil ON Urunler
ENABLE TRIGGER tr_UrunSil ON Urunler[/CODE]

Başka bir örnek olarak silinen ürün sipariş tablosunda mevcut ise silme işlemini iptal edelim.

[CODE]CREATE TRIGGER tr_UrunSil ON Urunler
AFTER DELETE
AS
BEGIN
DECLARE @Uid INT
SET @Uid=SELECT UrunID FROM DELETED
IF EXISTS(SELECT * FROM Siparisler WHERE UrunID=@Uid)
BEGIN
Print 'Ürün siparişlerde mevcut, silinenmez'
ROLLBACK TRANSACTION
RETURN
END
END[/CODE]

Son olarak SQL Server 2005 ile birlikte gelen DDL triggerlara bir örnek verelim. Veritabanımızı tabloların silinmesine karşı koruyalım.

[CODE]CREATE TRIGGER tr_TabloSilinmesin ON DATABASE
FOR DROP_TABLE
AS
Print 'Veritabanından tablo silinenmez'
ROLLBACK[/CODE]

Bu yazıda bildiğim ve dilimin döndüğü kadarı ile SQL Server Trigger'larını anlatmaya çalıştım, umarım faydalı olmuştur.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...