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

今天看到有朋友在群中问能否为触发器设置执行顺序,有朋友说触发器在数据库中自动执行,所以不能够设置执行顺序。其实这种说法是不对的,我们可以利用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个,那我们就完全可以控制执行顺序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值