我在表TEST上有触发器UPDATETRIGGER,
它被编写为在 TEST 表更新时被调用。
现在,在此UPDATETRIGGER中正在更新同一TEST表的列。
这会递归吗?
我的触发器和表位于 MS SQL 数据库中。从表中的值我发现它并没有以这种方式发生,请任何人解释一下。
USE [TESTING]
GO
/****** Object: Trigger [dbo].[UPDATETRIGGER] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[UPDATETRIGGER] on [dbo].[TEST]
FOR UPDATE
AS
UPDATE dbo.TEST
SET lastEditedDate=GetDate()
FROM INSERTED newdata
WHERE TEST.MasterK = newdata.MasterK
最佳答案
触发事件可以在另一个触发操作中触发。一个触发器执行甚至可以在另一张表或同一张表上触发。该触发器称为嵌套触发器或递归触发器。 SQL Server 中的嵌套触发器最多支持 32 层触发器的嵌套。
嵌套意味着当一个触发器被触发时,它也会导致另一个触发器被触发。 如果触发器创建不定式循环,则将超出 32 层嵌套,触发器将取消并显示错误消息。递归触发器是指触发器触发并执行一条语句,该语句将导致同一触发器触发。
禁用嵌套/递归触发器:以下脚本将停止执行所有嵌套触发器。
sp_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO
还有一种停止触发递归的替代方法:
ALTER DATABASE databasename
SET RECURSIVE_TRIGGERS ON | OFF
将触发器嵌套限制到一定级别 将以下脚本放入触发器代码中。这将在一定级别后停止触发递归。在以下情况下,它将在 5 次递归后停止。
IF ( TRIGGER_NESTLEVEL(OBJECT_ID(@@PROCID)) > 5 )
RETURN;
关于sql-server - 将触发表上的更新将是递归的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26858636/