Sayfayı Yazdır | Pencereyi Kapat

SQL Server Trigger INSERT anında veride değişimi

Nereden Yazdırıldığı: Datakent
Kategori: Diğer bölümler
Forum Adı: Microsoft SQL Server
Forum Tanımlaması: Microsoft SQL Server ile ilgili soru / sorun ve paylaşım bölümü
URL: http://forum.datakent.com/forum_posts.asp?TID=2848
Tarih: 28.Mart.2024 Saat 19:29


Konu: SQL Server Trigger INSERT anında veride değişimi
Mesajı Yazan: murat turan
Konu: SQL Server Trigger INSERT anında veride değişimi
Mesaj Tarihi: 27.Ocak.2016 Saat 13:45
SQL Server 'da INSERT veya UPDATE komutları işletildiğinde, gelen verinin kontrol edilip belli şartları sağlamaması durumunda değiştirilmesi için TRIGGER kullanılabilir. Aşağıda örnek olarak bir trigger verilmiştir.

Bu Trigger öncelikle INSERT ve UPDATE anlarında işletilecektir. Tercihe göre bir tanesi bırakılabilir.

Kodu açıklama gerekirse, KAYIT ANINDA veya GÜNCELLEME anında kullanıcı arabiriminden gelen "RECORD_GROUP" alanı eğer boş gelir ise bu alan otomatik olarak "Newbie" ibaresi ile değiştirilmekte ve alanın boş geçilmesi engellenmektedir.

-- AFTER
CREATE TRIGGER [dbo].[TEST_TABLE_TRIGGER1]
   ON  [dbo].[TEST_TABLE]
   AFTER INSERT, UPDATE
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @RECORD_GROUP varchar(50)

    SELECT @RECORD_GROUP = i.RECORD_GROUP FROM inserted i -- gelen veri / incoming data

    IF @RECORD_GROUP = ''
    BEGIN
        UPDATE dbo.TEST_TABLE
            SET RECORD_GROUP = '(Newbie)' -- yeni değer / new value
        FROM inserted
        WHERE dbo.TEST_TABLE.REFID = inserted.REFID
    END
END



-- Benzer işlemler INSTEAD OF INSERT ile de yapılabilir fakat bu bağlamda INSERT kullanmak gerekiyor. Bu tür tekil veya az alan kontrolünde YUKARIDAKİ TEKNİĞİN daha ideal olduğunu düşünüyorum fakat INSTEAD OF daha performanslı çalışıyor.


-- BEFORE
CREATE TRIGGER [dbo].[TEST_TABLE_TRIGGER2]
   ON  [dbo].[TEST_TABLE]
   INSTEAD OF INSERT
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @RECORD_GROUP varchar(50)

    SELECT @RECORD_GROUP = i.RECORD_GROUP FROM inserted i -- gelen veri / incoming data

    IF @RECORD_GROUP = ''
    BEGIN
        INSERT TEST_TABLE
            SELECT REFID, NAME, SURNAME, '(Newbie)'
            FROM inserted
    END   
END



-- Örnekte kullanılan tablo yapısı:
CREATE TABLE [dbo].[TEST_TABLE](
    [REFID] [int] NOT NULL,
    [NAME] [varchar](50) NOT NULL,
    [SURNAME] [varchar](50) NOT NULL,
    [RECORD_GROUP] [varchar](50) NOT NULL,
 CONSTRAINT [PK_AA] PRIMARY KEY CLUSTERED
(
    [REFID] ASC
))



KeyWords: SHow can I edit values of an INSERT in a trigger on SQL Server?, T-SQL how to modify the value before insert, Modify data before it's inserted in SQL Server





-------------
http://www.kasatakip.com - Kasa Takip  |  http://www.caritakip.com - Cari Takip  |  http://www.evraktakip.com - Evrak Takip  |  http://www.etasqlmobil.com - ETA SQL Mobil



Sayfayı Yazdır | Pencereyi Kapat