当表上定义的 INSTEAD OF 触发器对表执行一条通常会激发该触发器的语句时,并不会递归调用该触发器。而是如同表中没有 INSTEAD OF 触发器那样处理该语句,该语句将启动一系列约束操作和 AFTER 触发器执行。例如,如果触发器定义为表的 INSTEAD OF INSERT 触发器,并且触发器在同一表上执行 INSERT 语句,则由 INSTEAD OF 触发器执行的 INSERT 语句不会再次调用该触发器。该触发器执行的 INSERT 将启动执行约束操作的进程并激发为该表定义的所有 AFTER INSERT 触发器。
当视图上定义的 INSTEAD OF 触发器对视图执行一条通常会激发 INSTEAD OF 触发器的语句时,并不会递归调用该触发器。而是将语句解析为对视图所依存的基本表进行修改。在这种情况下,视图定义必须满足可更新视图的所有约束。有关可更新视图的定义,请参见通过视图修改数据。例如,如果触发器定义为视图的 INSTEAD OF UPDATE 触发器,并且触发器执行引用同一视图的 UPDATE 语句,则由 INSTEAD OF 触发器执行的 UPDATE 语句不会再次调用该触发器。将如同视图没有 INSTEAD OF 触发器一样在视图中处理由该触发器执行的 UPDATE 语句。由 UPDATE 更改的列必须解析到一个基表。对基表的每次修改都将应用约束并激发为该表定义的 AFTER 触发器。
在表或视图上,每个 INSERT、UPDATE 或 DELETE 语句最多可以定义一个 INSTEAD OF 触发器。然而,可以在每个具有 INSTEAD OF 触发器的视图上定义视图。
INSTEAD OF 触发器不能在 WITH CHECK OPTION 的可更新视图上定义。如果向指定了 WITH CHECK OPTION 选项的可更新视图添加 INSTEAD OF 触发器,SQL Server 将产生一个错误。用户必须用 ALTER VIEW 删除该选项后才能定义 INSTEAD OF 触发器。
WITH APPEND 不能与 INSTEAD OF 触发器一起使用,或者,如果显式声明 AFTER 触发器,也不能使用该子句。只有当出于向后兼容而指定 FOR 时(没有 INSTEAD OF 或 AFTER),才能使用 WITH APPEND。以后的版本将不支持 WITH APPEND 和 FOR(将被解释为 AFTER)。