为什么触发器“而不是删除”不是递归的?

问题描述

我想知道如何在不调用相同触发器的情况下在触发器“而不是删除”中执行 DELETE 查询?它是 sql 功能吗?有人可以解释为什么它会这样工作吗?

解决方法

来自docs

如果在表上定义的 INSTEAD OF 触发器针对该表运行通常会再次触发 INSTEAD OF 触发器的语句,则不会递归调用该触发器。相反,该语句就像表没有 INSTEAD OF 触发器一样进行处理,并启动约束操作链和 AFTER 触发器执行。例如,如果触发器被定义为表的 INSTEAD OF INSERT 触发器。并且,触发器在同一个表上运行 INSERT 语句,由 INSTEAD OF 触发器启动的 INSERT 语句不会再次调用触发器。触发器启动的 INSERT 开始运行约束操作并触发为表定义的任何 AFTER INSERT 触发器。

它是这样运作的,因为这是微软的决定。虽然我无法想象递归会对 INSTEAD OF 有用。