Datakent Ana Sayfa
Anasayfa Anasayfa > Diğer bölümler > Microsoft SQL Server
  Aktif Konular Aktif Konular RSS: SQL Server Trigger INSERT anında veride değişimi
  Yardım Yardım  Hızlı Ara   Kayıt Ol Kayıt Ol  Giriş Giriş

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

 Yanıt Yaz Yanıt Yaz
Yazar
Mesaj
murat turan Açılır Menü Göster
Admin Group
Admin Group
Simge
Datakent

Kayıt Tarihi: 01.Ekim.2003
Bulundugu Yer: Turkey
Online: Sitede Değil
Gönderilenler: 1798
  Alıntı murat turan Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Konu: SQL Server Trigger INSERT anında veride değişimi
    Gönderim Zamanı: 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





Düzenleyen murat turan - 08.Subat.2016 Saat 10:16
Yukarı Dön
 Yanıt Yaz Yanıt Yaz

Forum Atla Forum İzinleri Açılır Menü Göster



Bu Sayfa 0,230 Saniyede Yüklendi. [power by : WebWiz]