现在的位置: 首页 > 综合 > 正文

SQL Server触发器

2013年07月21日 ⁄ 综合 ⁄ 共 1480字 ⁄ 字号 评论关闭

       触发器是一类特殊的存储过程,只有到特定事件发生时在会调用。触发器有两种类型:数据定义语言(DDL)触发器和数据操纵语言(DML)触发器。

一、DDL触发器

 

二、DML触发器

        DML触发器是附加到特定表或视图的代码片段。只有当附加到表的事件发生时,触发器代码才会自动执行。触发器不能够显示调用。DML触发器的类型:1)INSERT触发器;2)DELETE触发器;3)UPDATE触发器;4)上面的任意类型组合

创建触发器的语法如下:

sd

1.ON 子句

         用于声明触发器关联的表或者视图。但要注意,如果触发器类型是FOR或者AFTER触发器,那么其必须为一个表,不能为视图。

2.WITH ENCPYPTION选项

        该选项用于代码保密,设置了该选项后就不能查看代码了。但如果使用了ALTER后,也需呀带上该选项,如果不设置该选项,那么修改后就不保密了。

3.FOR|ALTER子句和INSTEAD OF子句

         用于设置触发器的查询类型,以及设置触发器的激活时间,是修改前执行,还是修改后执行。注意,在修改数据提交给数据库之前,就处于触发器中了。其中使用FOR和ALTER只能附加到表上,而不能附加到视图上。而INSTEAD OF既可以附加到表上,也可以附加到视图上。FOR和ALTER设置的触发器,用于在触发语句执行完,并且约束检查完成后,才会执行触发器。而用INSTEAD OF设置的触发器将代替出发语句执行。

1)INSERT触发器:会将插入的新行的副本插入到一个特殊表Inserted表中,该表只在触发器激活时处在,在触发器结束后没释放。还有一个空的Deleted表。

2)DELETE触发器:其会有一个空的Inserted表,和将被删除记录的副本插入特殊表Deleted表。该表也只存在于触发器激活的时间内。

3)UPDATE触发器:其相当于删除旧行,插入新行。因此,其会包含Inserted表,和Deleted表。

4.WITH APPEND

         用于特使SQL Server运行建立同一动作的触发器。

5.NOT FOR REPLICATION

        设置了这个选项,无论与复制相关的任务何时修改表,都不会激活触发器。通常,当修改了原始表并且不会再进行修改的时候会激活触发器。

6.AS 子句

        后面跟着触发器要执行的语句。

三、触发器的一些问题

1. 触发器可以嵌套

2.触发器可以递归

3.在不删除的情况下可以关闭触发器,其形式:

        ALTR TABLE myTableName

         <ENABLE|DISABLE> TRIGGER <ALL|<trigger name>>;

4.设置触发器的激活顺序

        在SQL Server 7.0之前(包含)是不能够设置触发器的激活顺序的。而在7.0之后的版本可以设置一个也是唯一的一个最优先触发器,还可以设置一个唯一的最后触发的触发器,其他触发器不能够设置顺序。并且只能对AFTER触发器,也就是表的触发器设置激活顺序。

 可以使用存储过程sp_srttriggerorder,其语法如下:

sd

5.每个触发操作只能有一个INSERT OF触发器,但可以有多个AFTER触发器。

6.触发器和附加的语句同属一个事务。因此,是可以在出发器中使用ROLLBACK语句。

7.可以使用UPDATE()函数来判断某列是否更新,该函数只能用于触发器作用域中;还可以使用COLUMNS_UPDATE()函数来对多个列判断是否更新,是通过位掩码来实现的。

四、删除触发器

其语法格式如下:

sd

抱歉!评论已关闭.