Aşağıda görülen şablon INSERT, UPDATE ve DELETE işlemlerinin her biri için hazır trigger şablonunu vermektedir. NOT FOR REPLICATION satırı eğer replication ile ilgili işlem yapmıyorsanız gereksizdir. Replication kullanıyorsanız ve *NOT FOR REPLICATION* eklenmişse replication işlemi için bu trigger çalışmayacaktır. Son olarak trigger'ların yaygın olarak INSTEAD OF [DELETE, UPDATE, INSERT] kullanımı da vardır. INSTEAD OF kullanımının farkı tabloya bir işlem yapmadan önce kontrolü size vermesidir.
CREATE TRIGGER [TRIGGER_NAME] ON [TABLE_NAME]
FOR INSERT, UPDATE, DELETE
NOT FOR REPLICATION
AS
BEGIN
IF (SELECT COUNT(*) FROM inserted) > 0
BEGIN
IF (SELECT COUNT(*) FROM deleted) > 0
BEGIN -- UPDATE PROCESS
INSERT INTO TABLE_NAME2(FIELD1, FIELD2)
(SELECT D.FIELD1, I.FIELD2
FROM inserted I INNER JOIN deleted D
ON I.CAMPAIGN_ID = D.CAMPAIGN_ID)
END
ELSE
BEGIN -- INSERT PROCESS
INSERT INTO TABLE_NAME2(FIELD1, FIELD2)
(SELECT FIELD1, FIELD2 FROM inserted)
END
END
ELSE
BEGIN -- DELETE PROCESS
INSERT INTO TABLE_NAME2(FIELD1, FIELD2)
(SELECT FIELD1, FIELD2 FROM deleted)
END
END
Volkan Özyılmaz
CREATE TRIGGER [TRIGGER_NAME] ON [TABLE_NAME]
FOR INSERT, UPDATE, DELETE
NOT FOR REPLICATION
AS
BEGIN
IF (SELECT COUNT(*) FROM inserted) > 0
BEGIN
IF (SELECT COUNT(*) FROM deleted) > 0
BEGIN -- UPDATE PROCESS
INSERT INTO TABLE_NAME2(FIELD1, FIELD2)
(SELECT D.FIELD1, I.FIELD2
FROM inserted I INNER JOIN deleted D
ON I.CAMPAIGN_ID = D.CAMPAIGN_ID)
END
ELSE
BEGIN -- INSERT PROCESS
INSERT INTO TABLE_NAME2(FIELD1, FIELD2)
(SELECT FIELD1, FIELD2 FROM inserted)
END
END
ELSE
BEGIN -- DELETE PROCESS
INSERT INTO TABLE_NAME2(FIELD1, FIELD2)
(SELECT FIELD1, FIELD2 FROM deleted)
END
END
Volkan Özyılmaz
Yorumlar