2010-07-11 68 views
1

我有一个递归触发器,似乎正是我想要它没有递归,但是当我把递归上我得到的错误:“最大存储过程,函数,触发器或(限制32)“如何调试递归触发器

这不应该发生,因为我期望2层或3层嵌套,所以我需要调试触发器并计算出究竟发生了什么。我添加了打印语句,但这不起作用...

你如何去调试递归触发器?

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 

回答

3

您可以在您的触发SELECT语句(我只是尝试这样做 - 尝试SELECT * FROM DataInstance在触发更新之前)。

我已经重申了这个问题 - 触发器中的更新导致触发器再次触发即使没有行更新。一个合适的解决方法是将UPDATE语句包装在IF (SELECT COUNT(*) FROM INSERTED) <> 0 BEGIN ... END块中的触发器中。

+0

甜,是的,这是问题! – 2010-07-11 23:11:31