繁体   English   中英

SQL 服务器在表上插入、删除和更新时触发

[英]SQL Server trigger on insert,delete & update on table

我有一个表Product和另一个表ProductLog

日志表需要跟踪Product表中的两列。 每次对这些列进行插入、更新或删除时,我都需要更新日志表。

我需要编写三个单独的触发器,还是一个触发器可以处理这些操作?

我还需要知道操作的类型,例如我需要知道日志表中的条目是因为插入、删除还是更新。 如果有人给我一个例子,那就太好了。

您只需要一个触发器

CREATE TRIGGER [ProductAfter] ON [Product] AFTER INSERT, UPDATE, DELETE

您可以根据触发器主体中可用的inserteddeleted表中的记录数确定哪个 DML 语句触发触发器。 对于INSERTdeleted是空的,对于DELETEinserted是空的,对于UPDATEinserteddeleted都不是空的。 例如,

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM