SQL Server’da Veri Kontrolü ile Trigger Çalıştırmak
Herkese merhaba,
Bu yazıda SQL Server’da veri kontrolü ile Trigger çalıştırmak hakkında bilgi vereceğim.
Sorunun çıkış noktası bir arkadaşın mail üzerinden aşağıdaki soruyu bana sormasıdır.
Soru : A tablosuna insert yapıldığında B tablosuna da aynı veriyi Trigger kullanarak insert işlemini gerçekleştiriyorum. Peki B tablosuna veriyi insert işlemi gerçekleşmeden önce A tablosundan gönderilen bilginin B tablosunda olup olmadığını nasıl kontrol edebilirim? B tablosunda şarta uygun veri varsa insert yapmasın, yoksa insert yapsın şeklinde bir sorgu nasıl yazabilirim.
Konu hakkında basit bir örnek yazdım. Daha kapsamlısı da yazılır ya da siz de yazabilirsiniz.
Aşağıdaki örnek kodları inceleyerek siz de bu işlemi rahatlıkla yapabilirsiniz.
--SehirTablosu oluşturulur.
CREATE TABLE SehirTablosu
(
Id INT PRIMARY KEY IDENTITY(1, 1),
Sehir NVARCHAR(50)
);
GO
--SehirTablosu kopyası oluşturulur.
CREATE TABLE SehirTablosuCopy
(
Id2 INT PRIMARY KEY IDENTITY(1, 1),
Sehir2 NVARCHAR(50)
);
GO
--Kopyalama Trigger oluşturulması
CREATE TRIGGER tr_Sehir_Aktarma
ON SehirTablosu
FOR INSERT
AS
BEGIN
DECLARE @Sayac INT = 0;
DECLARE @SehirAd NVARCHAR(50);
SELECT @SehirAd = inserted.Sehir
FROM inserted;
SELECT @Sayac = COUNT(Sehir2)
FROM SehirTablosuCopy
WHERE Sehir2 = @SehirAd;
IF @Sayac = 0
BEGIN
INSERT INTO dbo.SehirTablosuCopy
(
Sehir2
)
VALUES
(@SehirAd);
END;
END;
Tabloları ve Kopyalama Trigger’ını oluşturdum.
Şimdi tablomuza veri ekleyelim ve tabloyu kontrol edelim. Aşağıdaki sorguyu çalıştırın.
--Tabloya veri eklenmesi
INSERT INTO dbo.SehirTablosu
(
Sehir
)
VALUES
('İstanbul' -- Sehir - nvarchar(50)
);
--Tablonun kontrol edilmesi
SELECT *
FROM dbo.SehirTablosuCopy;
Trigger çalıştı ve SehirTablosuCopy içerisine kayıt eklenmiş oldu.
Şimdi aynı veriyi tekrar tabloya ekleyelim.
INSERT INTO dbo.SehirTablosu
(
Sehir
)
VALUES
('İstanbul' -- Sehir - nvarchar(50)
);
Görüldüğü üzere Trigger çalışmadı. Çalışsaydı yine iki adet affected yazısını görecektiniz. SehirTablosuCopy tablosunu tekrar kontrol edelim.
Görüldüğü üzere veri kontrolü yaparak Trigger çalıştırmış olduk.
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.