欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » SQLServer教程 » 正文

热门阅读

利用sp_settriggerorder设置触发器执行顺序

创建时间:2011年09月02日 17:19  阅读次数:(7351)
分享到:
今天看到有朋友在群中问能否为触发器设置执行顺序,有朋友说触发器在数据库中自动执行,所以不能够设置执行顺序。其实这种说法是不对的,我们可以利用sp_settriggerorder为部分触发器设置执行顺序。

先看看sp_settriggerorder的功能说明:
sp_settriggerorder:指定第一个激发或最后一个激发的AFTER触发器。在第一个和最后一个触发器之间触发的AFTER触发器将按未定义的顺序执行。

语法说明:
sp_settriggerorder [ @triggername = ] '[ triggerschema. ] triggername',
[ @order = ] 'value',
[ @stmttype = ] 'statement_type'[ , [ @namespace = ] { 'DATABASE' | 'SERVER' | NULL } ]


参数说明:
@triggername = ] '[ triggerschema. ] triggername'
要设置或更改其顺序的触发器的名称及其所属的架构。

[@order=] 'value'
触发器的新顺序的设置,可以是下列值中的任意一个值。
First--触发器被第一个触发。 
Last--触发器被最后一个触发。 
None--触发器以未定义的顺序触发。


[@stmttype=] 'statement_type'
指定触发器的类型,可以是INSERT、UPDATE、DELETE、LOGON 或用于激发DDL触发器的DDL事件中列出的任何 Transact-SQL 语句事件。

@namespace = { 'DATABASE' | 'SERVER' | NULL }
如果 triggername 是 DDL 或登录触发器,则指定所创建的 triggername 是具有数据库范围还是服务器范围。

返回值:
0(成功)或 1(失败)

注意:
1,当触发器被修改,那么对它的sp_settriggerorder设置也会失效,也就是说每次修改触发器后,你都需要重新利用sp_settriggerorder对执行顺序进行设置。
2,同一类型的触发器(insert,update,delete)只能设置一个First与一个Last触发器,也就是说,只能设置一个最先执行的与最后执行的触发器,中间的就设置不了。

示例代码:
设置insert触发器ti_Storage_MoveDetail为第一个执行的触发器
sp_settriggerorder 'ti_Storage_MoveDetail','first','insert'


设置update触发器tu_Storage_MoveDetail为最后一个执行的触发器
sp_settriggerorder 'tu_Storage_MoveDetail','last','update'


所以, 如果触发器不是instead of触发器,而且每类(insert,update,delete)的触发器数量不超过3个,那我们就完全可以控制执行顺序。r貜賬b哊T Y栠sIRg憃
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论4条
  • #1楼  评论人:匿名  评论时间:2011-9-5 16:24:40
  • 谢谢,正是我想要的.
  • #2楼  评论人:匿名  评论时间:2011-9-5 16:33:53
  • 不错不错,一直还以为触发器是不可以设置执行顺序呢.
  • #3楼  评论人:匿名  评论时间:2012-7-10 13:41:10
  • 原来触发器还可以控制顺序啊
  • #4楼  评论人:Wyf  评论时间:2012-7-10 19:51:39
  • 是啊,但是超过三个同类型的触发器就不能设置了。不过能设置fisrt与last已经能够满足大部分需求了。
发表评论:
留言人:
内  容:
请输入问题 8+91=? 的结果(结果是:99)
结  果: