SQL Server中INSTEAD OF和AFTER触发器有什么区别?

10

INSTEAD OF触发器与AFTER触发器在SQL Server中有何不同?

INSTEAD OF触发器在唯一键约束之前被调用,而AFTER触发器在唯一键约束之后被调用吗?

2个回答

18

AFTER触发器会在DML操作之后触发。 INSTEAD OF触发器会代替 DML操作触发。

这是一个很大的区别。INSTEAD OF触发器允许您覆盖功能,或实现其他不支持的功能。我通常使用它来创建可更新视图。有时候,一个视图可能不是键保存的,但作为设计者,您可能知道要更新哪个基表,因此可以编写特定的逻辑来在幕后进行更新。另一种选择是编写存储过程,并强制开发人员调用这些存储过程,而对视图执行DML是一个不错的抽象,因为开发人员可以像对待表一样处理视图。这就是关系设计的本意。

关于“唯一键约束之后”,AFTER触发器将在DML操作成功后触发,因此它将在任何违规操作之后发生(这将导致回滚)。


当存在约束违规时,'AFTER'触发器不会触发(因为语句在达到触发点之前失败并被回滚)。请参考此链接了解更多信息:https://learn.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms179304(v=sql.105)?redirectedfrom=MSDN - John B. Lambe

2

触发器(Trigger)分为After Trigger和Instead of Trigger两种类型,其中After Trigger在数据修改之后执行,而Instead of Trigger则在数据修改之前执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接