wmismail Posted June 4, 2009 Share Posted June 4, 2009 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,UPDATEAS 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 UrunlerAFTER DELETEASBEGIN INSERT INTO Debug SELECT 'Ürün Silindi : ' + CONVERT(Varchar,UrunID) + ', ' + UrunAdi FROM DELETEDEND[/CODE]Tanımlı olan triggerları aşağıdaki sql cümleleri ile enable veya disable edebiliriz.[CODE]DISABLE TRIGGER tr_UrunSil ON UrunlerENABLE 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 UrunlerAFTER DELETEASBEGIN 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 ENDEND[/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_TABLEAS 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 More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.