使用 SQL Server 2012,是否可以在服务器/数据库级别启用嵌套触发器,但在一个特定表/触发器上禁用嵌套?
问问题
1798 次
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 回答