今天写有关数据库的程序,需要用到触发器,以前也写过但是却没有深究。今天准备整理一下。
首先看触发器的定义。顾名思义触发就是当我们执行一种操作时引起其它操作的行为。我们通常所说的触发器是指DML触发器。DML 触发器嘛就是是当数据库服务器中发生数据操作语言 (DML) 事件时要执行的操作。DML 事件包括对表或视图发出的 UPDATE、INSERT 或 DELETE 语句。DML 触发器用于在数据被修改时强制执行业务规则,以及扩展 Microsoft SQL Server 约束、默认值和规则的完整性检查逻辑。
像常规触发器一样,DDL 触发器将激发存储过程以响应事件。但与 DML 触发器不同的是,它们不会为响应针对表或视图的 UPDATE、INSERT 或 DELETE 语句而激发。相反,它们将为了响应各种数据定义语言 (DDL) 事件而激发。这些事件主要与以关键字 CREATE、ALTER 和 DROP 开头的 Transact-SQL 语句对应。执行 DDL 式操作的系统存储过程也可以激发 DDL 触发器。
DML触发器的类型。
- after触发器:在执行了 INSERT、UPDATE 或 DELETE 语句操作之后执行 AFTER 触发器。指定 AFTER 与指定 FOR 相同,它是 Microsoft SQL Server 早期版本中唯一可用的选项。AFTER 触发器只能在表上指定。
- instead of触发器:执行 INSTEAD OF 触发器代替通常的触发动作。还可为带有一个或多个基表的视图定义 INSTEAD OF 触发器,而这些触发器能够扩展视图可支持的更新类型。
- CLR 触发器可以是 AFTER 触发器或 INSTEAD OF 触发器。CLR 触发器还可以是 DDL 触发器。CLR 触发器将执行在托管代码(在 .NET Framework 中创建并在 SQL Server 中上载的程序集的成员)中编写的方法,而不用执行 Transact-SQL 存储过程。
函数 | AFTER 触发器 | INSTEAD OF 触发器 |
---|---|---|
适用范围 | 表 | 表和视图 |
每个表或视图包含触发器的数量 | 每个触发操作(UPDATE、DELETE 和 INSERT)包含多个触发器 | 每个触发操作(UPDATE、DELETE 和 INSERT)包含一个触发器 |
级联引用 | 无任何限制条件 | 不允许在作为级联引用完整性约束目标的表上使用 INSTEAD OF UPDATE 和 DELETE 触发器。 |
执行 | 晚于:
| 早于:
替代:
晚于:
|
执行顺序 | 可指定第一个和最后一个执行 | 不适用 |
插入的和删除的表中的 varchar(max)、nvarchar(max) 和 varbinary(max) 列引用。 | 允许 | 允许 |
插入的和删除的表中的 text、ntext 和 image 列引用。 | 不允许 | 允许 |
看下面的表:
函数 | AFTER 触发器 | INSTEAD OF 触发器 |
---|---|---|
适用范围 | 表 | 表和视图 |
每个表或视图包含触发器的数量 | 每个触发操作(UPDATE、DELETE 和 INSERT)包含多个触发器 | 每个触发操作(UPDATE、DELETE 和 INSERT)包含一个触发器 |
级联引用 | 无任何限制条件 | 不允许在作为级联引用完整性约束目标的表上使用 INSTEAD OF UPDATE 和 DELETE 触发器。 |
执行 | 晚于:
| 早于:
替代:
晚于:
|
执行顺序 | 可指定第一个和最后一个执行 | 不适用 |
插入的和删除的表中的 varchar(max)、nvarchar(max) 和 varbinary(max) 列引用。 | 允许 | 允许 |
插入的和删除的表中的 text、ntext 和 image 列引用。 | 不允许 | 允许 |
函数 | AFTER 触发器 | INSTEAD OF 触发器 |
---|---|---|
适用范围 | 表 | 表和视图 |
每个表或视图包含触发器的数量 | 每个触发操作(UPDATE、DELETE 和 INSERT)包含多个触发器 | 每个触发操作(UPDATE、DELETE 和 INSERT)包含一个触发器 |
级联引用 | 无任何限制条件 | 不允许在作为级联引用完整性约束目标的表上使用 INSTEAD OF UPDATE 和 DELETE 触发器。 |
执行 | 晚于:
| 早于:
替代:
晚于:
|
执行顺序 | 可指定第一个和最后一个执行 | 不适用 |
插入的和删除的表中的 varchar(max)、nvarchar(max) 和 varbinary(max) 列引用。 | 允许 | 允许 |
插入的和删除的表中的 text、ntext 和 image 列引用。 | 不允许 | 允许 |
今天先说这么多。