今天写有关数据库的程序,需要用到触发器,以前也写过但是却没有深究。今天准备整理一下。
????? 首先看触发器的定义。顾名思义触发就是当我们执行一种操作时引起其它操作的行为。我们通常所说的触发器是指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 列引用。
不允许
允许
今天先说这么多。
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!