有两个用于设计 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 触发器。 |
执行 |
晚于:
|
早于:
替代:
晚于:
|
执行顺序 |
可指定第一个和最后一个执行 |
不适用 |
插入的和删除的表中的 varchar(max)、nvarchar(max) 和 varbinary(max) 列引用。 |
允许 |
允许 |
插入的和删除的表中的 text、ntext 和 image 列引用。 |
不允许 |
允许 |