触发器触发器是一种特殊类型的存储过程,它不同前面介绍过的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名称而被直接调用。触发器是一个功能强大的工具,它使每个站点可以在有数据修改时自动强制执行其业务规则。触发器可以用于SQL Server约束、默认值和规则的完整性检查。 当往某一个表格中插入记录、修改记录或者删除记录时,SQL Server就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合由这些SQL语句所定义的规则。在触发器中可以查询其他表格或者包括复杂的SQL语句。触发器和引起触发器执行的SQL语句被当作一次事务处理,如果这次事务未获得成功,SQL Server会自动返回该事务执行前的状态。和CHECK约束相比较,触发器可以强制实现更加复杂的数据完整性,而且可以参考其他表的字段。它的主要优点如下:(1)触发器是自动的。当对表中的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被xx。(2)触发器可以通过数据库中的相关表进行层叠更改。如,可以在titles表的title-id列上写入一个删除触发器,以使其他表中的各匹配行采取删除操作。该触发器用title-id列作为惟一键,在titleauthor、sales及roysched表中对各匹配行进行定位。(3)触发器可以强制限制。这些限制比用CHECK约束所定义的更复杂。与CHECK约束不同的是,触发器可以引用其它表中的列。例如,触发器可以回滚试图对价格低于10美元的书(存储在title表中)应用折扣(存储在discounts表中)的更新。一、创建触发器在SQL Server中,可以使用企业管理器或者Transact-SQL语句来创建触发器。在创建触发器之前应该考虑以下几个问题:(1)CREATE TRIGGER语句必须是批处理中的{dy}个语句。将该批处理中随后的其它所有语句解释为CREATE TRIGGER语句定义的一部分。(2)创建触发器的权限默认分配给表的所有者,且不能将该权限转给其他用户。(3)触发器为数据库的对象,其名称必须遵循标识符的命名规则。(4)虽然触发器可以引用当前数据库以外的对象,但只能在当前数据库中创建触发器。(5)虽然不能在临时表或系统表上创建触发器,但是触发器可以引用临时表。不应引用系统表,而应使用信息架构视图。有关更多信息,请参见信息架构视图。(6)在含有用DELETE或UPDATE操作定义的外键的表中,不能定义INSTEAD OF和INSTEAD OF UPDATE触发器。(7)虽然TRUNCATE TABLE语句类似于没有WHERE子名(用于删除行)的DELETE语句,但它并不会引发DELETE触发器,因为TRUNCATE TABLE语句没有记录。(8)WRITETEXT语句不会引发INSERT或UPDATE触发器。(9)当创建一个触发器时必须指定:名称;在其上定义触发器的表;触发器将何时激发;xx触发器的数据修改语句,有效选项为INSERT、UPDATE或DELETE,多个数据修改语句可xx同一个触发器,如,触发器可由INSERT或UPDATE语句xx;执行触发器操作的编程语句。1.使用企业管理器创建触发器在企业管理器中,展开指定的服务器和数据库项,然后展开其上创建触发器的表所在的数据库,右击该表,选择“所有任务--管理触发器”,在名称文本框中选择新建,输入触发器文本,单击“检查语法”,单击“应用--确定”即可。2.使用CREATE TRIGGER命令创建触发器使用CREATE TRIGGER命令可以创建触发器,其中需要指定定义触发器的基表、触发器执行的事件和触发器的所有指令。创建触发器的过程类似于创建存储过程,其语法形式如下:CREATE TRIGGER trigger_name
|