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。一般也就是做數據庫審計或者監控需要用到這個函數,創建一個觸發器來獲取函數返回的數據,把數據寫到日誌表。
參考: