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 TetikMesajTetikleyici 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üşterilerTü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....
Hiç yorum yok:
Yorum Gönder