确定触发器是否发生UPDATE,DELETE或INSERT的最佳方法是什么

时间:2013-03-08 18:45:52

标签: sql-server triggers

我想在MS SQL中为INSERT,UPDATE和DELETE创建单个触发器,但我希望能够在没有3个IF语句的情况下简单地提取数据

我想做这样的事情:

DECLARE @PK  int

SELECT @PK = COALESCE(i.PK, d.PK)
FROM inserted i, deleted d

这不起作用,但想知道我是否可以在一个查询中完成。

有哪些替代方案?

2 个答案:

答案 0 :(得分:1)

您可以执行此处的切换逻辑:SQL Server Trigger switching Insert,Delete,Update

或者您可以创建3种不同的触发器。

这些是你的选择。

答案 1 :(得分:0)

我最终使用FULL OUTER JOIN

DECLARE @DataIWanted as varchar(255)

SELECT @DataIWanted = COALESCE(i.TheData,d.TheData)
FROM inserted i
   FULL OUTER JOIN deleted d on d.PK=i.PK

上面的查询将来自已删除的表或插入/更新的表。假设在数据库中将TheData定义为NON NULL。