基于数据对象创建,删除,登录等事件的触发器称为事件触发器。
范例:
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