SQL Server ->> 觸發器函數 COLUMNS_UPDATED \UPDATE \TRIGGER_NESTLEVEL \EVENTDATA

COLUMNS_UPDATED和UPDATE

這兩個函數都是用於表觸發器裏面判斷字段是否被更新。區別是前者是位掩碼來實現,比較繞,好處是可以檢查多個字段。後者的用法就比較簡單,就是把字段名稱作爲參數,但是隻能單個字段。我覺得從代碼可讀性來說還是UPDATE比較好理解。

 

TRIGGER_NESTLEVEL

這個是用在防止觸發器嵌套觸發,例如觸發器裏面執行數據插入\更新 再觸發當前觸發器,從而導致進入循環,所以要如果當前觸發內會對錶再執行更新\插入,需要添加對TRIGGER_NESTLEVEL的檢查,防止觸發器嵌套層數太多。

 

IF ( (SELECT TRIGGER_NESTLEVEL( OBJECT_ID('xyz') , 'AFTER' , 'DML' ) ) > 5 )  
   RAISERROR('Trigger xyz nested more than 5 levels.',16,-1)

 

EVENTDATA

用在DDL或者登錄觸發器裏面(服務器或者數據庫級別),EVENTDATA返回XML數據。DDL或者登錄觸發器事件觸發後把事件數據發送給Service Broker。一般也就是做數據庫審計或者監控需要用到這個函數,創建一個觸發器來獲取函數返回的數據,把數據寫到日誌表。

 

參考:

EVENTDATA (Transact-SQL)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章