Uğraştığım bir projede tabloların yedeklerinin alınması gerekiyordu. Ben de bunun için iş yerinde de kullandığımız trigger mantığını kullanarak loglama yapmaya çalıştım.
Deneme amaçlı ilk önce bir tablo ekledim
CREATE TABLE deneme([satir] [nvarchar](50) COLLATE Turkish_CI_AS NULL)
Sonrada bu tablonun log tablosunu oluşturuyoruz
CREATE TABLE deneme_log(
[satir] [nvarchar](50) COLLATE Turkish_CI_AS NULL,
[DML] [nvarchar](1) COLLATE Turkish_CI_AS NULL,
[LOG_DATE] [datetime] NULL)
Burada DML sütunu yapılan işlemin durumunu , LOG_DATE de loglama yapılan tarihi belirtiyor
Ardından trigger ımızı ekliyoruz
CREATE TRIGGER [deneme_Log_TRG]
ON deneme
FOR UPDATE, DELETE
AS
BEGIN TRANSACTION
DECLARE @state NVARCHAR(1)
IF EXISTS (SELECT * FROM inserted) AND EXISTS (SELECT * FROM deleted)
SELECT @state = 'U'
ELSE IF EXISTS (SELECT * FROM inserted)
SELECT @state = 'I'
ELSE
SELECT @state = 'D'
INSERT INTO deneme_Log
SELECT a.*, @state, GETDATE() FROM deleted a
COMMIT TRANSACTION
Bu trigger sayesinde silinen veye değiştirilen kayıtların eski hallerini log tablosuna atmış oluyoruz.
Triggerın ilk kısmında durumu alıyoruz, update işlemi ise U, insert işlemi ise I, delete işlemi ise D olarak tanımlıyoruz sonrada log tablomuza eski kayıtlarla birlikte durum ve log tarih alanlarını ekliyoruz.