onedups

SQL Trigger (Tetikleyici) Kullanımı

Trigger, kelime anlamı olarak tetikleyici demektir. SQL Server’da kullanılma amacı, bir işlem yapıldığında farklı bir işlem daha yapılmasını istiyorsak tetikleyici kullanmamız gerekir.

Şöyle bir örnek verelim, bir tabloyu sildiğinizi düşünün ama o tablonun silinmemesini, uyarı mesajı verilmesini istiyorsunuz. Tabloyu “sildiğiniz anda” uyarı mesajı verebilir, buradaki tetikleyici olay tabloyu silmek oldu. Yani tetikleyici hangi tablonun üzerindeyse o tablo üzerinde çalışır.

Kısacası veri tabanında ki yapılan işlemlerin loglarını tutmamıza yardımcı olur.

Bir Trigger Oluşturmak için;

    CREATE TRIGGER Trigger'a verilecek isim 
     ON Etkilenmesini istediğimiz alan
     Tetikleyici türü (After/Instead Of/FOR) Komut (insert,update,delte)
     AS
     SQL_ifadeleri(Prosedür)

Tetikleyici Mesajlarını tutabilmemiz için bir tabloya ihtiyacımız vardır;

    CREATE TABLE TetikMesaj
      (
          MesajNo int IDENTITY(1,1) primary key, 
          TetikAdı varchar(30),
          Mesaj varchar(250),
          Tarih datetime default getdate() 
      )

Yukarıdaki Komutu Çalıştıktan sonra Tablonun oluşup oluşmadığını bu komut ile kontrol edelim… SELECT * FROM TetikMesaj

Tetikleyici kayıtlarının tutulduğu tablo hazır olduğuna göre bir tetikleyici hazırlayalım;

Yapacağımız işlemde Çalışanlar tablosuna bir veri eklenince bize bir log çıkarsın…

    CREATE TRIGGER YeniKayit
     ON Çalışanlar
     AFTER INSERT
     AS
     INSERT INTO TetikMesaj(TetikAdı,Mesaj )
     VALUES('YeniKayit','Çalışanlar Tablosuna bir kayıt eklendi')
     GO

Bu İşlemlerde Trigger Tetiklenmez!!!!

     UPDATE Çalışanlar
     SET Soyadı='Doğan'
     WHERE ÇalışanNo=1
     -- tetiklemez,

     DELETE FROM Çalışanlar WHERE Adı ='Adalet'
     -- tetiklemez

Bu İşlemde Trigger Tetiklenir!!!

INSERT INTO Çalışanlar(ÇalışanNo,Adı,Soyadı)

VALUES(20,‘One’,‘Dups’)

Bir Tetikleyiciyi etkisiz hale getirebilmek için ;

     DISABLE TRIGGER TetikleyiciAdı ON TabloAdı

Trigger’ı Etkinleştirmek için ;

     ENABLE TRIGGER tetikleyiciAdı ON TabloAdı

Bir Trigger’ı Silmek İçin;

     DROP Trigger TetikleyiciAdı

Bir Tetikleyiciyi Değiştirmemiz için ALTER Komutunu Kullanmalıyız
Alter Komutundan sonra tetikleyiciyi en baştan yazmalıyız

     ALTER TRIGGER YeniKayit
     ON Çalışanlar
     AFTER INSERT
     AS
     INSERT INTO TetikMesaj(TetikAdı,Mesaj )
     VALUES('YeniKayit','Çalışanlar Tablosuna bir kayıt eklendi')
     GO

Güvenlik Amacıyla da TRİGGER Kullanılır…
Veri tabanında ki tüm kayıtları silmeye çalışıldığında bir mesaj göndermesini sağlayan bir TRİGGER oluşturalım;

     CREATE TRIGGER silmeIslemi
     ON Müşteriler
     INSTEAD OF DELETE
     AS
     INSERT INTO TetikMesaj(TetikAdı,Mesaj)
     VALUES('silmeIslemi','Müşteri bilgileri silinmeye çalışılıyor')

DELETE FROM Müşteriler

Tüm İşlemleri Yaptıktan Sonra müşterileri Silmeye Çalıştığımız da Silindi Olarak Gözükecek Fakat Müşteriler Tablosundan herhangi bir veri silinmeyecektir….

onedups ~ terminal