7

使用 SQL Server 2012,是否可以在服务器/数据库级别启用嵌套触发器,但在一个特定表/触发器上禁用嵌套?

4

1 回答 1

8

我认为您应该能够通过使用自 SQL Server 2008 起可用TRIGGER_NESTLEVEL()函数来实现您的目的:

返回为触发触发器的语句执行的触发器数。TRIGGER_NESTLEVEL在 DML 和 DDL 触发器中用于确定当前的嵌套级别。

BEGIN您可以更改相关触发器的代码,在关键字之后添加以下语句。诀窍是动态计算object_id当前触发器的,它TRIGGER_NESTLEVEL()期望作为第一个参数:

IF TRIGGER_NESTLEVEL(
    ( SELECT object_id FROM sys.triggers WHERE name = 'MyTrigger' )
) > 1 RETURN

这实际上会阻止给定的触发器递归执行。

另一种选择是TRIGGER_NESTLEVEL()不带参数使用。这将返回为该语句执行所有触发器的次数。我对您的用例的理解是,第一个解决方案应该是您所需要的。

于 2019-03-03T00:56:19.660 回答