Merhaba arkadaşlar bu makalede SQL’de Trigger’ların ne işe yaradığından ve nasıl kullanıldığından bahsetmek istiyorum.
Trigger Nedir?
Trigger’ın türkçe karşılığı tetikleyicidir.Yani bir işlem yapıldığında o işlem sonucunda başka bir işlemin başlamasını sağlar.
Bir örnek vermek istersek;
Veritabanımızda “Urun” ve “UrunLog” adında tablolarımız olduğunu varsayalım.Bu “Urun” tablomuzda meydana gelen değişiklikleri “UrunLog” tablomuzda loglayıp takip etmek isteyelim.
Bu seneryoda farklı işlemler gerçekleyip amacımıza ulaşabiliriz fakat biz Trigger ile nasıl yapıldığına bakacağız.
Önemli Not : Triggerlar sadece Insert ve Update işlemlerinde çalışırlar.Delete işlemlerinde bir tepki vermezler.
Buyrun şimdi aşağıdaki sorguyu takip ederek yukarıda yazdığımız senaryoyu gerçekleyelim.
--Test Veritabanımızı oluşturuyoruz.
CREATE DATABASE Test
--Urun Tablomuzu oluşturuyoruz.
CREATE TABLE Urun
(
UrunId INT IDENTITY(1,1) NOT NULL,
UrunAdi NVARCHAR(50) NULL,
UrunKodu NVARCHAR(50) NULL,
AktifMi BIT NULL
)
--Urun tablosunda yapılan işlemlerin loglarını
--tutacağımız UrunLog tablosunu oluşturuyoruz.
CREATE TABLE UrunLog
(
UrunLogId INT IDENTITY(1,1) NOT NULL,
UrunLogDate DATETIME NULL,
UrunId INT NULL,
UrunAdi NVARCHAR(50) NULL,
UrunKodu NVARCHAR(50) NULL,
AktifMi BIT NULL
)
--Urun tablomuzda yapılan değişiklikleri
--UrunLog tablosuna kayıt etmek için Trigger'ımızı oluşturuyoruz.
CREATE TRIGGER Trigger_Urun ON Urun
AFTER INSERT,UPDATE
AS
BEGIN
INSERT INTO UrunLog
SELECT GETDATE(), --UrunLog tablosunda UrunLogDate alanı için
* --UrunLog tablomuzdaki diger bütün alanlar Urun tablomuzdaki ile aynı olduğu için
--* ile hepsini çekiyoruz.
FROM INSERTED
END

--Urun tablosuna Gofret adında bir ürün ekliyoruz
INSERT INTO Urun
VALUES ('Gofret','Gfr',1)
--Urun tablomuzu kontrol ediyoruz
SELECT *
FROM Urun
.JPG)
--Urun tablosunda yapmış olduğumuz değişiklik
--UrunLog tablomuza trigger ile kayıt olmuşmu
--diye kontrol ediyoruz.
SELECT *
FROM UrunLog
--Urun tablosuna eklemiş olduğumuz Gofret ürününün
--adını Test Gofret olarak güncelliyoruz.
UPDATE Urun
SET UrunAdi = 'Test Gofret'
WHERE UrunAdi = 'Gofret'
--Urun tablomuzu kontrol ediyoruz
SELECT *
FROM Urun
--Urun tablosunda yapmış olduğumuz değişiklik
--UrunLog tablomuza trigger ile kayıt olmuşmu
--diye kontrol ediyoruz.
SELECT *
FROM UrunLog
--Test için yaptığımız tabloları
--veritabanımızdan kaldırıyoruz.
DROP TABLE Urun
DROP TABLE UrunLog
Umarım yararlı bir makale olmuştur.
Bir sonraki makalede görüşmek üzere.
İyi günler dilerim.