欢迎光临

木子屋

标题: SQL Server2000 触发器

作者: dnawo

日期: 2009-01-22 04:52 PM

分类: 服务器

内容: 触发器是一种特殊的存储过程，在用户试图对指定的表执行指定的数据修改语句时自动执行。创建语法：
引用内容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 设置无关。

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.563 ms

返回

标题: SQL Server2000 触发器

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.563 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.594 ms

返回