Sql Server触发器(执行顺序控制)

一、触发器分类

 DDL 触发器将激发,以响应各种数据定义语言 (DDL) 事件。 这些事件主要与以关键字 CREATE、ALTER、DROP、GRANT、DENY、REVOKE 或 UPDATE STATISTICS 开头的 Transact-SQL 语句对应。 执行 DDL 式操作的系统存储过程也可以激发 DDL 触发器。

DML 触发器为特殊类型的存储过程,可在发生数据操作语言 (DML) 事件时自动生效,以便影响触发器中定义的表或视图。 DML 事件包括 INSERT、UPDATE 或 DELETE 语句。 DML 触发器可用于强制业务规则和数据完整性、查询其他表并包括复杂的 Transact-SQL 语句。 将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。 如果检测到错误(例如,磁盘空间不足),则整个事务即自动回滚。
DML触发器又分为 AFTER 触发器与 INSTEAD OF 触发器
AFTER 触发器
在执行 INSERT、UPDATE、MERGE 或 DELETE 语句的操作之后执行 AFTER 触发器。 如果违反了约束,则永远不会执行 AFTER 触发器;因此,这些触发器不能用于任何可能防止违反约束的处理。 对于在 MERGE 语句中指定的每个 INSERT、UPDATE 或 DELETE 操作,将为每个 DML 操作触发相应的触发器。
INSTEAD OF 触发器
INSTEAD OF 触发器替代下列触发语句的标准操作。 因此,触发器可用于对一个或多个列执行错误或值检查,然后在插入、更新或删除行之前执行其他操作。 例如,当在工资表中小时工资列的更新值超过指定值时,可以将触发器定义为产生错误消息并回滚该事务,或在将记录插入工资表中之前将新记录插入到审核记录。 INSTEAD OF 触发器的主要优点是可以使不能更新的视图支持更新。 例如,基于多个基表的视图必须使用 INSTEAD OF 触发器来支持引用多个表中数据的插入、更新和删除操作。 INSTEAD OF 触发器的另一个优点是使您得以编写这样的逻辑代码:在允许批处理的其他部分成功的同时拒绝批处理中的某些部分。
在这里插入图片描述
二、AFTER 触发器执行的顺序
通俗理解为instead of触发器是先于入库之前执行的,同一个表上只能有一个instead of触发器;但是可以有多个alter触发器,多个alter处理器执行的先后顺序是怎么样的呢?默认是按照触发器名称的顺序执行的,但是可以通过sql语句的方式设置顺序。
可将与表关联的 AFTER 触发器之一指定为执行每个 INSERT、DELETE 和 UPDATE 触发操作时激发的第一个或最后一个 AFTER 触发器。 在第一个和最后一个触发器之间激发的 AFTER 触发器将按未定义的顺序执行。
sql语句语法为:sp_settriggerorder @triggername = ‘MyTrigger’, @order = ‘first’, @stmttype = ‘UPDATE’

感谢参考材料:
https://docs.microsoft.com/zh-cn/sql/relational-databases/triggers/logon-triggers?view=sql-server-2017
https://blog.csdn.net/daoyuly/article/details/3931025
https://www.cnblogs.com/BinBinGo/p/6431244.html
https://www.cnblogs.com/wghao/archive/2011/05/15/2047221.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值