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。一般也就是做数据库审计或者监控需要用到这个函数,创建一个触发器来获取函数返回的数据,把数据写到日志表。
参考: