对AFTER触发器的一些整理
将AFTER触发器的一些特性和注意事项整理一下,注意以下内容仅适用于MSSQL系列。
1、什么时机触发
在语句执行后触发,注意不论此语句影响了多少行数据(包括0行),都只触发一次。如果原语句因为违反约束等原因未生效,触发器不被触发。
2、触发器SQL与原SQL是一个事务吗
是的,也就是说,如果触发器SQL执行失败了,原SQL也会不成功。
3、同类型的多个触发器冲突吗
如果定义了多个同类型的触发器比如INSERT,除了能定义哪个最先执行和哪个最后执行外,其它的无法控制,是无序串行执行的。
4、inserted表和deleted表的作用
这是两个特殊的表,inserted表包含了受影响行数据的新镜像,deleted表包含了旧镜像。简单点说,你把一行数据从AAA改成BBB,那么在inserted表中此记录是BBB,deleted表中是AAA。
这两个表都与触发器所在表保持同构,但没有索引。
对INSERT操作,只有inserted表有数据,对DELETE操作,只有deleted表有数据,对UPDATE操作,两张表都有数据。
5、如何识别触发器类型
如果一个触发器同时处理INSERT/UDPATE/DELETE操作,又想识别出具体操作,一般的做法是通过inserted表和deleted表来判断,如下:
6、如何处理指定列的更新
通过UPDATE()方法来判断,传入列名。
7、怎样才能逐一处理受影响的数据
除非能构造出合适的SQL语句,否则一般情况都是用游标。随便给个例子:
总结
以上是生活随笔为你收集整理的对AFTER触发器的一些整理的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 【ubuntu】解决窗口管理器 不支持透
- 下一篇: 三言两语说说进程调度