有两个用于设计 DML 触发器的选项:
执行 INSTEAD OF 触发器代替通常的触发操作。还可以对带有一个或多个基表的视图定义 INSTEAD OF
触发器,这些触发器可以扩展视图可支持的更新类型。
在执行 INSERT、UPDATE 或 DELETE 语句操作之后执行 AFTER 触发器。指定 AFTER 与指定 FOR 相同。AFTER
触发器只能在表上指定。
下表对 AFTER 触发器和 INSTEAD OF 触发器的功能进行了比较。
函数
AFTER 触发器
INSTEAD OF 触发器
适用范围
表
表和视图
每个表或视图包含触发器的数量
每个触发操作(UPDATE、DELETE 和 INSERT)包含多个触发器
每个触发操作(UPDATE、DELETE 和 INSERT)包含一个触发器
级联引用
无任何限制条件
不允许在作为级联引用完整性约束目标的表上使用 INSTEAD OF UPDATE 和 DELETE 触发器。
执行
晚于:
约束处理
声明性引用操作
创建<b>插入的</b>和<b>删除的</b>表
触发操作
早于:
替代:
执行顺序
可指定第一个和最后一个执行
不适用
<b>插入的</b>和<b>删除的</b>表中的 <b>varchar(max)</b>、<b>nvarchar(max)</b> 和
<b>varbinary(max)</b> 列引用。
允许
<b>插入的</b>和<b>删除的</b>表中的 <b>text</b>、<b>ntext</b> 和 <b>image</b>
列引用。
不允许