在 SQL Server 2008 中,tblMedia 表 [dbo].[tblMediaAfterInsertOrUpdate] 上的触发器无意中导致递归行为。当触发器既被触发又随后触发自身时,就会出现此行为。
要了解该问题,让我们检查触发器:
ALTER TRIGGER [dbo].[tblMediaAfterInsertOrUpdate] ON [dbo].[tblMedia] BEFORE INSERT, UPDATE AS BEGIN ...
插入或更新后:触发器在提交插入或更新之前执行。
潜在递归:触发器内的更新语句尝试修改 tblMedia 表。此修改可能会再次触发相同的触发器,从而导致无限循环。
防止递归:为了防止这种递归行为,我们可以使用 TRIGGER_NESTLEVEL() 函数来检查嵌套级别触发器的。如果嵌套级别大于 1,则触发器正在被另一个触发器调用,应跳过。
ALTER TRIGGER [dbo].[tblMediaAfterInsertOrUpdate] ON [dbo].[tblMedia] BEFORE INSERT, UPDATE AS BEGIN IF TRIGGER_NESTLEVEL() <= 1 /* Prevent recursion */ BEGIN ... END END
说明:
通过将此检查合并到触发器中,我们可以防止它无限递归,并确保只执行一次必要的数据修改。
以上是如何防止 SQL Server 中的递归触发器?的详细内容。更多信息请关注PHP中文网其他相关文章!