一个触发器会激活 SQL Server 中的另一个触发器吗?

Posted

技术标签:

【中文标题】一个触发器会激活 SQL Server 中的另一个触发器吗?【英文标题】:Will one trigger activate another trigger in SQL Server? 【发布时间】:2016-05-05 16:11:25 【问题描述】:

共有三个表ABC和两个触发器ab

当表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 中创建触发器?

关于使用sql server 2008触发器完成修改一张表里一个字段同时修改另一张表的另一字段

Sql server --触发器

SQL Server2008 触发器中,根据一个表修改另外一个表

如何使用 SQL Server 更新触发器中的原始值更改第二条记录

更新 SQL Server 中的另一个行值