理解T-SQL: 触发器

     触发器是一种响应特定事件的特殊类型的存储过程。有两种类型的触发器:数据定义语言(DDL)和数据操作语言(DML)触发器。
     DDL能够响应某种方式(Create,ALter,Drop)修改数据库结构时激发; DML是附加在特定表和视图上的代码。程序不能显式调用触发器,触发器代码是某种事件产生后被自动执行。DDL是SQL Server2005新增的功能。
     使用触发器能够满足数据库操作的一些高级功能,其中包括:能够强制引用的完整性,尤其是涉及到跨服务器,复杂数据关系时;能够创建审核跟踪,跟踪每一条记录实际修改历史;能够跨表、跨数据库进行Check约束等。

1. 创建触发器
     创建触发器的语法如下所示:

Code


     ON:表示基于什么对象创建触发器。如果是AFTER触发器,则ON子句的对象必须是一个表,不能是视图。
     WITH ENCRYPTION: 加密触发器代码
     FOR|AFTER: 决定由什么类型的动作激发触发器,包括Delete、Insert、Update动作。FOR和AFTER表明了DML 触发器仅在触发 SQL 语句中指定的所有操作都已成功执行时才被激发。所有的引用级联操作和约束检查也必须在激发此触发器之前成功完成。
     INSTEAD OF:这个功能可以用来对视图进行Delete、Insert、Update,动作的激发是在修改数据之前。FOR/AFTER与INSTEAD OF调用顺序关系如图所示:、
trigger

   

 

2. INSERT、DELETE、UPDATE触发器
   对于任何标记FOR/AFTER INSERT的触发器,无论何时,只要向表中插入新行,就会执行触发器的代码,对于每一个插入的行,SQL Server会将行的内容存储到一个特殊的表中,表名称为INSERTED,在触发器的代码内可以访问这张表。
  对于DELETE触发器,SQL Server维护一张DELETED表,在触发器的生命周期内存在。
  对于UPDATE触发器,SQL Server没有UPDATED表,相反,它维护两张表,分别是DELETED与INSERTED表。SQL Server把每一行更新看作是,先删除现在记录,再插入一个全新的记录。

 

3.其它更高级的主题请参见《SQL Server 2005 高级程序设计》第13章。暂时略过不提。这里只试举几个例子:

posted @ 2009-10-14 14:19  shipfi  阅读(871)  评论(0编辑  收藏