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)

 

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