一个触发器会激活 SQL Server 中的另一个触发器吗?
Posted
技术标签:
【中文标题】一个触发器会激活 SQL Server 中的另一个触发器吗?【英文标题】:Will one trigger activate another trigger in SQL Server? 【发布时间】:2016-05-05 16:11:25 【问题描述】:共有三个表A
、B
、C
和两个触发器a
、b
。
A
更新时,触发器a
将被激活并更新表B
当表B
更新时,触发器b
将被激活并更新表C
当我更新表A
时,表C
会更新吗?
如果没有,怎么办?
【问题讨论】:
是的,C 应该更新了。 Nested Triggers。而且 StevieG 说的没错,你的 C 表应该更新了。 你尝试的时候发生了什么? 我会详细说明我的问题。当我在A
中插入一条记录时,A
会被触发器更新。确实如此!然后B
应该由触发器a
更新。但事实并非如此。
是的,您的触发器将按您的预期触发。然而,根据我的经验,这是一个糟糕的设计,会给那些必须维护此代码的人带来很大的困难。我强烈建议您不要这样做;相反,创建一个过程来根据需要更新表 A、B 和 C 并调用此过程,而不是指望嵌套触发器按您期望的顺序触发。
【参考方案1】:
DML 触发器最多可以嵌套 32 层,但可以在服务器层关闭。因此,如果表 B 和 C 的更新很重要,那么您需要确保永远不会关闭此设置,这在应用程序的生命周期内可能难以确保。
参见 MSDN > 创建嵌套触发器:https://msdn.microsoft.com/en-GB/library/ms190739.aspx
【讨论】:
以上是关于一个触发器会激活 SQL Server 中的另一个触发器吗?的主要内容,如果未能解决你的问题,请参考以下文章
关于使用sql server 2008触发器完成修改一张表里一个字段同时修改另一张表的另一字段
SQL Server2008 触发器中,根据一个表修改另外一个表