我有一個表Product
和另一個表ProductLog
。插入,刪除和更新表上的SQL Server觸發器
日誌表需要跟蹤Product
表中的兩列。每次在這些列上插入,更新或刪除時,我都需要更新日誌表。
我需要寫三個單獨的觸發器,還是一個觸發器可以處理這些操作?
我還需要知道操作的類型,例如我需要知道日誌表中的條目是因爲插入,刪除還是更新。如果有人給我一個很好的例子。
我有一個表Product
和另一個表ProductLog
。插入,刪除和更新表上的SQL Server觸發器
日誌表需要跟蹤Product
表中的兩列。每次在這些列上插入,更新或刪除時,我都需要更新日誌表。
我需要寫三個單獨的觸發器,還是一個觸發器可以處理這些操作?
我還需要知道操作的類型,例如我需要知道日誌表中的條目是因爲插入,刪除還是更新。如果有人給我一個很好的例子。
你只需要一個觸發
CREATE TRIGGER [ProductAfter] ON [Product] AFTER INSERT, UPDATE, DELETE
您可以確定哪些DML語句都根據記錄數扳機觸發體內可inserted
和deleted
表。對於INSERT
,deleted
爲空,對於DELETE
,inserted
爲空,對於UPDATE
均爲inserted
和deleted
不爲空。例如,
IF @@ROWCOUNT = 0 -- exit trigger when zero records affected
BEGIN
RETURN;
END;
DECLARE @type CHAR(1);-- 'U' for update, 'D' for delete, 'I' for insert
IF EXISTS(SELECT * FROM inserted)
BEGIN
IF EXISTS(SELECT * FROM deleted)
BEGIN
SET @type ='U';
END
ELSE
BEGIN
SET @type ='I';
END
END
ELSE
BEGIN
SET @type = 'D';
END;
此外,採取Tracking Data Changes一看,有一個跟蹤變化,而不觸發另一種選擇。
或只是
DECLARE @type CHAR(1)=
case when not exists(SELECT * FROM inserted)
then 'D'
when exists(SELECT * FROM deleted)
then 'U'
else
'I'
end
我有同樣的問題,有的人能幫助我。請參閱以下鏈接http://stackoverflow.com/questions/26043106/how-to-determine-if-insert-or-update/26043654#26043654 – Prathyush 2014-09-25 17:07:38