日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

对AFTER触发器的一些整理

發(fā)布時(shí)間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对AFTER触发器的一些整理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

將AFTER觸發(fā)器的一些特性和注意事項(xiàng)整理一下,注意以下內(nèi)容僅適用于MSSQL系列。

1、什么時(shí)機(jī)觸發(fā)

在語句執(zhí)行后觸發(fā),注意不論此語句影響了多少行數(shù)據(jù)(包括0行),都只觸發(fā)一次。如果原語句因?yàn)檫`反約束等原因未生效,觸發(fā)器不被觸發(fā)。

?

2、觸發(fā)器SQL與原SQL是一個(gè)事務(wù)嗎

是的,也就是說,如果觸發(fā)器SQL執(zhí)行失敗了,原SQL也會不成功。

?

3、同類型的多個(gè)觸發(fā)器沖突嗎

如果定義了多個(gè)同類型的觸發(fā)器比如INSERT,除了能定義哪個(gè)最先執(zhí)行和哪個(gè)最后執(zhí)行外,其它的無法控制,是無序串行執(zhí)行的。

?

4、inserted表和deleted表的作用

這是兩個(gè)特殊的表,inserted表包含了受影響行數(shù)據(jù)的新鏡像,deleted表包含了舊鏡像。簡單點(diǎn)說,你把一行數(shù)據(jù)從AAA改成BBB,那么在inserted表中此記錄是BBB,deleted表中是AAA。

這兩個(gè)表都與觸發(fā)器所在表保持同構(gòu),但沒有索引。

對INSERT操作,只有inserted表有數(shù)據(jù),對DELETE操作,只有deleted表有數(shù)據(jù),對UPDATE操作,兩張表都有數(shù)據(jù)。

?

5、如何識別觸發(fā)器類型

如果一個(gè)觸發(fā)器同時(shí)處理INSERT/UDPATE/DELETE操作,又想識別出具體操作,一般的做法是通過inserted表和deleted表來判斷,如下:

  • IF(EXISTS(SELECT?*?FROM?inserted))??
  • BEGIN??
  • ????IF(EXISTS(SELECT?*?FROM?deleted))??
  • ????????--有ins也有del,是UPDATE操作??
  • ????ELSE??
  • ????????--有ins無del,是INSERT操作??
  • END??
  • ELSE??
  • BEGIN??
  • ????--無ins有del,是DELETE操作??
  • END?
  • 6、如何處理指定列的更新

    通過UPDATE()方法來判斷,傳入列名。?

    ?

    7、怎樣才能逐一處理受影響的數(shù)據(jù)

    除非能構(gòu)造出合適的SQL語句,否則一般情況都是用游標(biāo)。隨便給個(gè)例子:

  • CREATE?TRIGGER?[dbo].[TriggerName]?
  • ON?[dbo].[TableName]?
  • AFTER?UPDATE??????--定義的是UPDATE的后觸發(fā)器?
  • AS?
  • BEGIN?
  • ????--無受影響行,直接返回?
  • ????IF(@@rowcount?=?0)?
  • ????????RETURN?
  • ?
  • ????DECLARE?@tag?INT?
  • ????--定義并打開一個(gè)游標(biāo)cur,用于從修改后的數(shù)據(jù)中查一下Tag字段的值?
  • ????DECLARE?cur?CURSOR?FAST_FORWARD?FOR?
  • ????????SELECT?Tag?FROM?inserted?
  • ????OPEN?cur?
  • ?
  • ????--通過游標(biāo)取數(shù)據(jù),把結(jié)果放到@tag中?
  • ????FETCH?NEXT?FROM?cur?INTO?@tag?
  • ????WHILE(@@fetch_status?=?0)?
  • ????BEGIN?
  • ????????--根據(jù)@tag來做一些處理,然后再取一條,直到@@fetch_status不為0?
  • ????????FETCH?NEXT?FROM?cur?INTO?@tag?
  • ????END?
  • ?
  • ????--關(guān)閉游標(biāo)并釋放資源?
  • ????CLOSE?cur?
  • ????DEALLOCATE?cur?
  • END?
  • ?

    ?

    ?

    ?

    ?

    總結(jié)

    以上是生活随笔為你收集整理的对AFTER触发器的一些整理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。