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;

SQL Server'da Veri Kontrolü ile Trigger Çalıştırmak

Trigger çalıştı ve SehirTablosuCopy içerisine kayıt eklenmiş oldu.

SQL Server'da Veri Kontrolü ile Trigger Çalıştırmak

Şimdi aynı veriyi tekrar tabloya ekleyelim.

INSERT INTO dbo.SehirTablosu
(
    Sehir
)
VALUES
('İstanbul' -- Sehir - nvarchar(50)
    );

SQL Server'da Veri Kontrolü ile Trigger Çalıştırmak

Görüldüğü üzere Trigger çalışmadı. Çalışsaydı yine iki adet affected yazısını görecektiniz. SehirTablosuCopy tablosunu tekrar kontrol edelim.

SQL Server'da Veri Kontrolü ile Trigger Çalıştırmak

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.

362 Kez Okundu

Yavuz Selim Kart

Yazılım ve veri tabanında bildiklerimi anlatmaya gayret ediyorum. Halen birçok programlama dili üzerinde araştırmalar yaparak kendimi geliştiriyorum. Bunlar haricinde Grafik Tasarım ve Wordpress konularına da ilgim bulunmakta. SEO ve Sosyal medya yönetimleri hakkında da bilgim mevcuttur. Kısaca çok çalışmayı seven azimli biriyim.

You may also like...

Yazı kopyalamak yasaktır!