我有一个递归触发器,它似乎完全按照我想要的方式进行,没有递归,但是当我转向递归时,我得到错误:“超出最大存储过程,函数,触发器或视图嵌套级别(限制) 32)“
这不应该发生,因为我希望有两个或三个级别的嵌套,所以我需要调试触发器并确定究竟发生了什么。我添加了一个打印声明,但这不起作用......
如何调试递归触发器?
ALTER TRIGGER [dbo].[DataInstance2_Trigger]
ON [dbo].[DataInstance]
AFTER UPDATE
AS
BEGIN
UPDATE DataInstance
SET
DataInstance.IsCurrent = i.IsCurrent
FROM DataInstance di
Inner join DataContainer dc on
di.DataContainerId = dc.DataContainerId
Inner join Inserted i on
dc.ParentDataContainerId = i.DataContainerId
WHERE di.IsCurrent != i.IsCurrent
declare @x int
SET @X = (select max(DataContainerId) from Inserted)
print @X
END
答案 0 :(得分:3)
你可以在触发器中包含一个SELECT语句(我刚试过这个 - 在触发器UPDATE之前尝试SELECT * FROM DataInstance
)。
我已经重新解决了这个问题 - 即使没有更新行,触发器中的UPDATE也会导致触发器再次触发。一个合适的解决方法是将UPDATE语句包装在IF (SELECT COUNT(*) FROM INSERTED) <> 0 BEGIN ... END
块中的触发器中。