4.SQL Server DML触发器--指定First和Last触发器

本文详细介绍了SQL中触发器的使用,包括为不同操作指定First和Last触发器的方法,以及如何通过sp_settriggerorder存储过程调整触发器的执行顺序。文章还展示了如何使用OBJECTPROPERTY函数检查触发器的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本文摘自《锋利的SQL》:http://item.jd.com/10380652.html

可以为一个表定义多个触发器,在某些时候,在执行这些触发器时可能需要一定的顺序。因此,允许为INSERTDELETEUPDATE操作指定激发的第一个和最后一个AFTER触发器,分别称之为FirstLast触发器。每个语句类型只能有一个First触发器和一个Last触发器,并且FirstLast触发器必须是两个不同的触发器。在FirstLast触发器之间的AFTER触发器没有固定的执行顺序。


要指定AFTER触发器的顺序,应当使用sp_settriggerorder存储过程。例如,下面的语句设置MyTrigger触发器是应用于UPDATE语句的第一个触发器:


sp_settriggerorder @triggername = 'MyTrigger',@order = 'first', @stmttype = 'UPDATE'


由于INSTEAD OF触发器一直在对基础表进行更新前激发,因此,不能将INSTEAD OF触发器指定为第一个或最后一个触发器。


如果使用ALTERTRIGGER语句更改了FirstLast触发器,则会删除它们的顺序值,必须使用sp_settriggerorder来重新设置。


可以通过OBJECTPROPERTY()函数的ExecIsFirstDeleteTriggerExecIsFirstInsertTriggerExecIsFirstUpdateTriggerExecIsLastDeleteTriggerExecIsLastInsertTriggerExecIsLastUpdateTrigger属性来确定触发器是否为First触发器还是Last触发器。参考下面的语句:


sp_settriggerorder @triggername = 'Trigger1',@order = 'first', @stmttype = 'UPDATE'


SELECT OBJECTPROPERTY(OBJECT_ID(N'Trigger1'),'ExecIsFirstUpdateTrigger'); --返回1,表示是用于UPDATEFirst触发器


OBJECTPROPERTY( )函数的第一个参数是数据库中对象的ID,可以通过OBJECT_ID函数根据指定的对象名称来获得ID。第二个参数是要获取信息的属性名称。如果是,返回1,否则返回0。如果指定的属性名称不正确,返回NULL




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值