Tetikleyiciler - Triggers

0

Tablolardaki değişiklikleri izleyen ve belirli koşulların karşılanması durumunda otomatik olarak çalışan özel bir veritabanı nesnesi olan SQL Server tetikleyicileri (triggers), veritabanı uygulamalarında oldukça kullanışlıdır. MSSQL (Microsoft SQL Server) veritabanında tetikleyiciler oluşturmak için T-SQL (Transact-SQL) dilinde özel bir sentaks kullanılır. 

 Bir tetikleyici, belirli bir olayın gerçekleşmesi durumunda çalışır. Bu olay, bir tablodaki veri değişiklikleri, yeni bir kayıt ekleme veya bir kaydın silinmesi olabilir. Tetikleyiciler, INSERT, UPDATE ve DELETE gibi SQL komutlarına yanıt olarak çalışabilirler.


MSSQL'de bir tetikleyici (trigger) yazmak için aşağıdaki adımları takip edebilirsiniz:

  1. İlk olarak, tetikleyicinin oluşturulacağı veritabanına bağlanın.
  2. CREATE TRIGGER ifadesini kullanarak yeni bir tetikleyici oluşturun. CREATE TRIGGER ifadesi aşağıdaki gibi görünmelidir:
    CREATE TRIGGER [trigger_adi]
    ON [tablo_adi]
    AFTER [insert, update veya delete]
    AS
    BEGIN
    -- Tetikleyici kodu buraya yazılır.
    END
    [trigger_adi]: Tetikleyici için kullanılacak bir isim.
    [tablo_adi]: Tetikleyicinin ilişkili olacağı tablonun adı.
    [insert, update veya delete]: Tetikleyicinin hangi işlemler için çalışacağı (ekleme, güncelleme veya silme).
    [AS BEGIN - END]: Tetikleyici kodunun başlangıç ve bitiş noktası.
  3. Tetikleyicinin kodunu yazın. Bu bölümde, tetikleyici işlemi gerçekleştirecek kod yazılır.
  4. Tetikleyiciyi kaydedin. Tetikleyiciyi kaydetmek için, SQL sorgu işlevlerini kullanabilirsiniz.

"inserted" ve "deleted" özel tabloları, SQL Server tarafından tetikleyiciler tarafından işlem yapılan tablodaki satır değişikliklerini takip etmek için kullanılır. 

 "inserted" tablosu, bir "INSERT" işlemi sonrasında tetiklenen bir tetikleyici tarafından işlem yapılan tabloya yeni eklenen satırların kopyasını içerir. 

 "deleted" tablosu, bir "DELETE" işlemi sonrasında tetiklenen bir tetikleyici tarafından işlem yapılan tablodan silinen satırların kopyasını içerir. 

 "UPDATE" işlemi sonrasında, "inserted" ve "deleted" tabloları birlikte kullanılır. "inserted" tablosu, güncellenmiş olan satırların kopyasını içerirken, "deleted" tablosu, güncellenen satırların orijinal kopyasını içerir. 

 Bu özel tablolar, tetikleyiciler tarafından kullanılarak tablolarda gerçekleşen veri değişikliklerini izlemek ve bu değişikliklerin ardından bir dizi işlem yapmak için kullanılabilir. Örneğin, bir tetikleyici, "inserted" ve "deleted" tablolarını kullanarak, bir "UPDATE" işlemi sonrasında güncellenen satırın eski ve yeni değerlerini karşılaştırabilir ve buna göre bir işlem yapabilir.



Örnek olarak, "Nakliyeciler" tablosundan bir kayıt silindiğinde "NakliyecilerYedek" adlı bir yedek tablosuna silinen kaydı eklemek için aşağıdaki tetikleyiciyi kullanabilirsiniz:

CREATE TRIGGER nakliyeciYedekle
ON Nakliyeciler
after delete
as
begin
	INSERT INTO NakliyecilerYedek
	SELECT * FROM deleted
end

Bu SQL kodu bir tetikleyici (trigger) tanımlar. Tetikleyici, "Nakliyeciler" tablosundan bir kayıt silindiğinde çalışacaktır.
Tetikleyici, "NakliyecilerYedek" adlı bir yedek tablosuna silinen kaydı eklemek için "deleted" özel tablosunu kullanır. "deleted" tablosu, son işlemde silinen kayıtların bir geçici tablosudur.
Bu kod, silinen kayıtların yedeklenmesi için basit bir yöntemdir. Böylece, eğer silinen kayıtlara daha sonra ihtiyaç duyulursa, "NakliyecilerYedek" tablosundan geri alınabilirler.



CREATE TRIGGER trgPersoneller_Insert
ON Personeller
AFTER INSERT
AS
BEGIN
    SET NOCOUNT ON;
    
    DECLARE @PersonelID int, @BagliCalistigiKisi int;
    
    SELECT @PersonelID = personelID, @BagliCalistigiKisi = BagliCalistigiKisi
    FROM inserted;
    
    IF @BagliCalistigiKisi is null
    BEGIN
		set @BagliCalistigiKisi = (Select top 1 PersonelID from Personeller where BagliCalistigiKisi is null)
        UPDATE Personeller
        SET BagliCalistigiKisi = @BagliCalistigiKisi
        WHERE PersonelID = @PersonelID;
    END
END

Bu tetikleyici, "Personeller" adlı bir tabloya yeni bir personel eklenmesi durumunda çalışır. Tetikleyici, yeni eklenen personelin "PersonelID" ve "BagliCalistigiKisi" sütunlarını seçer ve "BagliCalistigiKisi" sütununun değerini kontrol eder. 

 Eğer "BagliCalistigiKisi" sütununun değeri null ise, tetikleyici tarafından işlem yapılan tablodaki yeni eklenen personelin "BagliCalistigiKisi" sütununa, "BagliCalistigiKisi" sütunu null olan ilk personelin "PersonelID" değerini atar. 

 Örneğin, eğer yeni bir personel eklenirken "BagliCalistigiKisi" değeri null olarak kaydedilirse, tetikleyici tarafından null olan ilk personelin "PersonelID" değeri bulunarak yeni eklenen personelin "BagliCalistigiKisi" değeri otomatik olarak bu değerle güncellenir. 

 Bu tetikleyici, yeni eklenen personelin "BagliCalistigiKisi" sütununun null olması durumunda, otomatik olarak bu sütuna bir değer atanması için kullanılabilir. Bu, tablodaki personellerin verilerinin düzenli bir şekilde tutulmasına ve personel hiyerarşisinin oluşturulmasına yardımcı olabilir.



create trigger tgrUrunlerLog
on Urunler
after update
as
begin
	declare @eskiad nvarchar(40),@yeniad nvarchar(40)
	declare @eskiBirimFiyati money,@yeniBirimFiyati money
	declare @aciklama nvarchar(500)
	
	Select @eskiad = urunAdi,@eskiBirimFiyati = BirimFiyati from deleted
	Select @yeniad = urunAdi,@yeniBirimFiyati = BirimFiyati from inserted

	set @aciklama = 'Eski Adi : ' + @eskiad + ', Eski Birim Firyatı : ' + CONVERT(nvarchar(50),@eskiBirimFiyati)
	set @aciklama = @aciklama + ', Yeni Adi : ' + @yeniad + ', Yeni Birim Firyatı : ' + CONVERT(nvarchar(50),@yeniBirimFiyati)
	insert into UrunlerLog (aciklama,tarih) values (@aciklama,GETDATE())
end

Urunler tablosunda bir güncelleme işlemi gerçekleştiğinde tetiklenir. 

Tetikleyici, deleted ve inserted özel tablolarını kullanarak önceki ve yeni verileri alır. deleted tablosu, güncellenen verilerin önceki halini içerirken, inserted tablosu, güncellenen verilerin yeni halini içerir. 

 Daha sonra, önceki ve yeni verileri saklamak için değişkenler tanımlanır ve açıklama bilgisi oluşturulur. Açıklama bilgisi, güncelleme öncesindeki ve sonrasındaki verileri içerir. 

 Son olarak, UrunlerLog tablosuna açıklama bilgisi ve güncelleme tarihi bilgisi eklenir. 

 Bu tetikleyici, Urunler tablosunda yapılan herhangi bir güncelleme işlemi sonrasında, UrunlerLog tablosuna bir kayıt ekleyecektir. Kayıt, güncelleme öncesindeki ve sonrasındaki verileri içeren açıklama bilgisini ve kaydın oluşturulduğu tarihi içerecektir.

Yorum Gönder

0Yorumlar
Yorum Gönder (0)

#buttons=(Accept !) #days=(20)

Web sitemiz, deneyiminizi geliştirmek için çerezleri kullanır. Daha fazla
Accept !