导航

SQL Server 2005------事件触发器

Posted on 2009-07-01 11:53  鸡尾虾的壳  阅读(224)  评论(0)    收藏  举报

基于数据对象创建,删除,登录等事件的触发器称为事件触发器。

范例:
     CREATE TRIGGER [ddlDatabaseTriggerLog] ON DATABASE
     FOR DDL_DATABASE_LEVEL_EVENTS AS
     DECLARE @data XML;
     DECLARE @schema sysname;
     SET @data = EVENTDATA();  //获取Xml格式的事件信息
     SET @schema = @data.value('(/EVENT_INSTANCE/SchemaName)[1]', 'sysname');
     //也可以在@data上使用XQuery的query()方法获取节点信息,节点Layout如下
     /*   <EVENT_INSTANCE>
             <EventType>type</EventType>
             <PostTime>date-time</PostTime>
             <SPID>spid</SPID>
             <ServerName>name</ServerName>
             <LoginName>name</LoginName>
             <UserName>name</UserName>
             <DatabaseName>name</DatabaseName>
             <SchemaName>name</SchemaName>
             <ObjectName>name</ObjectName>
             <ObjectType>type</ObjectType>
             <TSQLCommand>command</TSQLCommand>
           </EVENT_INSTANCE>
      */
执行 DDL 式操作的系统存储过程也可以激发 DDL 触发器。测试您的 DDL 触发器以确定它们是否响应运行的系统存储过程。
例如,CREATE TYPE 语句和 sp_addtype 存储过程都将激发针对 CREATE_TYPE 事件创建的 DDL 触发器。但是,sp_rename 存储过程不会激发任何 DDL 触发器。

激发 DDL 触发器的事件组:http://msdn.microsoft.com/zh-cn/library/ms191441(SQL.90).aspx