使用SQL Server 2012,是否可以在服务器/数据库级别启用嵌套触发器,但是在一个特定的表/触发器上禁用嵌套?
答案 0 :(得分:3)
我认为您应该能够使用the TRIGGER_NESTLEVEL()
function来实现自己的目的,该功能自SQL Server 2008开始可用:
返回为触发该触发器的语句执行的触发器数量。
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()
。这将返回为该语句执行所有触发器的次数。我对您的用例的理解是,第一个解决方案应该是您所需要的。