CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

数据库 | Oracle | DB2 | SQL Server | MySQL | 商业智能 | BI | DBA | Sybase| SQL Server 2008

如何让多个触发器按照自己想要的顺序启动?

作者: Echo,  出处:IT专家网, 责任编辑: 李书琴, 
2008-01-17 13:22
  

  触发器启动顺序例子2

   我们假设现在需要对触发器1修改一个代码。现在修改代码,然后向表里插入一个新的客户。

Drop 触发器1

drop trigger dbo.tr_customer_1
go

创建触发器 1

create trigger dbo.tr_customer_1 on dbo.customer
for insert
as
set nocount on
print 'firing modified trigger 1'
go

插入语句

insert into dbo.customer default values
go

全部的代码和结果

全部代码

  我们在这里可以看到,触发器的启动顺序已经违反了业务要求,触发器2先于触发器1启动。我们可以使用sp_settriggerorder存储过程来纠正这个情况。

纠正代码

exec sp_settriggerorder @triggername = 'tr_customer_1',
@order = 'first',
@stmttype = 'insert',
@namespace = null

exec sp_settriggerorder @triggername = 'tr_customer_2',
@order = 'last',
@stmttype = 'insert',
@namespace = null
go

插入语句

insert into dbo.customer default values
go

全部的代码和结果

全部代码和结果

  触发器的启动顺序已经被改正过来了。

  3个以上触发器的启动顺序

  如果你有3个触发器,实际上可以对三个触发器启动进行排序,只要指定(首先启动(FIRST)的触发器和最后启动(LAST)的触发器。默认设置里,在已定义的FIRST启动的触发器和LAST启动的触发器之间的触发器并没有一个固定的启动顺序。所以,如果你只有三个触发器,可以通过上述方法设定它们的启动顺序,但是如果有4个或以上的触发器,那么就没有办法了,只能定义第一个和最后一个启动的触发器,而两者之间的触发器就不能强行固定其启动顺序了。

  关于触发器要注意的问题

  有一点需要注意的:如果你DROP触发器,然后重新创建,或者如果你ALTER触发器,之前对该触发器设置的属性都同样被drop掉了,你将不得不重新执行sp_settriggerorder来重新设置。同样,如果是复制的表,SQL Server Replication会在复制的表中创建FIRST触发器。在这种情况下,一般不应该对这些触发器进行改动,否则可能会造成意想不到的复制结果。

  其他选择 - OBJECTPROPERTY

  最后要说的是,要定义触发器的启动特性也可以通过OBJECTPROPERTY函数,使用ExecIsFirstInsertTrigger或ExecIsLastInsertTrigger属性。

 

  IT专家网原创文章,未经许可,严禁转载!

共2页。 9 1 2

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅


    
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2008, Ctocio.com.cn
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i