SQL Server2000 触发器
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
触发器是一种特殊的存储过程,在用户试图对指定的表执行指定的数据修改语句时自动执行。创建语法:
引用内容 Create TRIGGER trigger_name ON {table | view} {INSTEAD OF | AFTER} {[Insert] [,] [Update] [,] [Delete]} AS sql_statement 下边主要说下INSTEAD OF和AFTER两个参数的区别: ·执行时间:INSTEAD OF在SQL语句执行前触发,并且SQL语句不会再执行;AFTER则是在SQL语句执行后触发。 ·适用对象:INSTEAD OF适用于表和视图;AFTER只能用于表。 ·数量:Insert、Update和Delete允许有多个AFTER触发器,但只能有一个INSTEAD OF触发器。 再来说说触发器中经常会用到的两张表:inserted和deleted。这两张表在结构上类似于定义触发器的表,其中inserted存放的是Insert的记录或Update后的新记录,deleted存放的是Delete的记录或Update前的旧记录。例如当触发器中SQL语句的执行条件是判断新增记录某个字段值来进行的,那么就得从inserted获取新增记录。 示例 程序代码 /* download表增加一条记录时更新天预统计表count1 */ Create TRIGGER DownCountTR ON download AFTER Insert AS IF @@rowcount>0 BEGIN DECLARE @date1 datetime --从Inserted表中获取新下载的时间 Select @date1=convert(nvarchar(10),regtime,120) FROM Inserted --更新count1表 IF exists(Select * FROM count1 Where regtime=@date1) Update count1 SET downcount=downcount+1 Where regtime=@date1 ELSE Insert INTO count1(downcount,regtime) VALUES(1,@date1) END 程序代码 /* 禁止对表的更新和删除 */ Create TRIGGER STOP ON dbo.table1 INSTEAD OF Update, Delete AS RETURN 递归触发器 当在 sp_dboption 中启用 recursive triggers 设置时,SQL Server 还允许触发器的递归调用。递归触发器允许发生两种类型的递归: ·间接递归 ·直接递归 使用间接递归时,应用程序更新表 T1,从而激发触发器 TR1,该触发器更新表 T2。在这种情况下,触发器 T2 将激发并更新 T1。 使用直接递归时,应用程序更新表 T1,从而激发触发器 TR1,该触发器更新表 T1。由于表 T1 被更新,触发器 TR1 再次激发,依此类推。 说明 只有启用 sp_dboption 的 recursive triggers 设置,才会发生上述行为。对于为给定事件定义的多个触发器,并没有确定的执行顺序。每个触发器都应是自包含的。禁用 recursive triggers 设置只能禁止直接递归。若要也禁用间接递归,请使用 sp_configure 将 nested triggers 服务器选项设置为 0。 如果任一触发器执行了 ROLLBACK TRANSACTION 语句,则无论嵌套级是多少,都不会进一步执行其它触发器。 嵌套触发器 触发器最多可以嵌套 32 层。如果一个触发器更改了包含另一个触发器的表,则第二个触发器将激活,然后该触发器可以再调用第三个触发器,依此类推。如果链中任意一个触发器引发了无限循环,则会超出嵌套级限制,从而导致取消触发器。若要禁用嵌套触发器,请用 sp_configure 将 nested triggers 选项设置为 0(关闭)。默认配置允许嵌套触发器。如果嵌套触发器是关闭的,则也将禁用递归触发器,与 sp_dboption 的 recursive triggers 设置无关。 该文章在 2011/3/14 15:09:04 编辑过 |
关键字查询
相关文章
正在查询... |