gpt4 book ai didi

sql - 如何在 SQL Server 中禁用表或触发器级别的触发器嵌套?

转载 作者:行者123 更新时间:2023-12-02 20:17:16 25 4
gpt4 key购买 nike

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

最佳答案

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

Returns the number of triggers executed for the statement that fired the trigger. TRIGGER_NESTLEVEL is used in DML and DDL triggers to determine the current level of nesting.

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

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

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

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

关于sql - 如何在 SQL Server 中禁用表或触发器级别的触发器嵌套?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23224835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com