对AFTER触发器的一些整理
將AFTER觸發(fā)器的一些特性和注意事項(xiàng)整理一下,注意以下內(nèi)容僅適用于MSSQL系列。
1、什么時機(jī)觸發(fā)
在語句執(zhí)行后觸發(fā),注意不論此語句影響了多少行數(shù)據(jù)(包括0行),都只觸發(fā)一次。如果原語句因?yàn)檫`反約束等原因未生效,觸發(fā)器不被觸發(fā)。
?
2、觸發(fā)器SQL與原SQL是一個事務(wù)嗎
是的,也就是說,如果觸發(fā)器SQL執(zhí)行失敗了,原SQL也會不成功。
?
3、同類型的多個觸發(fā)器沖突嗎
如果定義了多個同類型的觸發(fā)器比如INSERT,除了能定義哪個最先執(zhí)行和哪個最后執(zhí)行外,其它的無法控制,是無序串行執(zhí)行的。
?
4、inserted表和deleted表的作用
這是兩個特殊的表,inserted表包含了受影響行數(shù)據(jù)的新鏡像,deleted表包含了舊鏡像。簡單點(diǎn)說,你把一行數(shù)據(jù)從AAA改成BBB,那么在inserted表中此記錄是BBB,deleted表中是AAA。
這兩個表都與觸發(fā)器所在表保持同構(gòu),但沒有索引。
對INSERT操作,只有inserted表有數(shù)據(jù),對DELETE操作,只有deleted表有數(shù)據(jù),對UPDATE操作,兩張表都有數(shù)據(jù)。
?
5、如何識別觸發(fā)器類型
如果一個觸發(fā)器同時處理INSERT/UDPATE/DELETE操作,又想識別出具體操作,一般的做法是通過inserted表和deleted表來判斷,如下:
6、如何處理指定列的更新
通過UPDATE()方法來判斷,傳入列名。?
?
7、怎樣才能逐一處理受影響的數(shù)據(jù)
除非能構(gòu)造出合適的SQL語句,否則一般情況都是用游標(biāo)。隨便給個例子:
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的对AFTER触发器的一些整理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【ubuntu】解决窗口管理器 不支持透
- 下一篇: 三言两语说说进程调度