插入,删除和更新表上的SQL Server触发器
问题描述:
我有一个表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