ddl 触发器是否有单一事件类型来跟踪数据库中的所有放置事件 (t-sql)?
Is there a single event type for ddl trigger that tracks all drop events in database (t-sql)?
我希望我的触发器记录我的数据库中发生的所有删除事件。
CREATE TRIGGER [log]
ON DATABASE
FOR DROP_TABLE, DROP_FUNCTION, DROP_TRIGGER, ...
AS ...
我可以把所有掉落事件都换成一个掉落将军吗?
CREATE TRIGGER [log]
ON DATABASE
FOR DROP_FOR_ALL_DATABASE_OBJECTS
AS ...
您需要使用DDL_DATABASE_LEVEL_EVENTS
。通过这个event
你可以记录每一个事件。
evendata()
功能包括您需要记录的所有信息。例如事件类型、对象名称等。注意 eventdata()
returns XML
.
create trigger [log]
on database
for DDL_DATABASE_LEVEL_EVENTS
as
begin
declare
@eventType as sysname;
select
@eventType = eventdata().value('(/EVENT_INSTANCE/EventType)[1]', 'SYSNAME');
if @eventType like '%drop%'
...
end;
更新:
eventdate()
XML 示例结果:
<EVENT_INSTANCE>
<EventType>**</EventType>
<PostTime>**</PostTime>
<SPID>**</SPID>
<ServerName>**</ServerName>
<LoginName>**</LoginName>
<UserName>**</UserName>
<DatabaseName>**</DatabaseName>
<SchemaName />
<ObjectName>**</ObjectName>
<ObjectType>**</ObjectType>
<TargetObjectName />
<TargetObjectType>**</TargetObjectType>
<TSQLCommand>
<SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON" QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE" />
<CommandText>
...
</CommandText>
</TSQLCommand>
</EVENT_INSTANCE>
我希望我的触发器记录我的数据库中发生的所有删除事件。
CREATE TRIGGER [log]
ON DATABASE
FOR DROP_TABLE, DROP_FUNCTION, DROP_TRIGGER, ...
AS ...
我可以把所有掉落事件都换成一个掉落将军吗?
CREATE TRIGGER [log]
ON DATABASE
FOR DROP_FOR_ALL_DATABASE_OBJECTS
AS ...
您需要使用DDL_DATABASE_LEVEL_EVENTS
。通过这个event
你可以记录每一个事件。
evendata()
功能包括您需要记录的所有信息。例如事件类型、对象名称等。注意 eventdata()
returns XML
.
create trigger [log]
on database
for DDL_DATABASE_LEVEL_EVENTS
as
begin
declare
@eventType as sysname;
select
@eventType = eventdata().value('(/EVENT_INSTANCE/EventType)[1]', 'SYSNAME');
if @eventType like '%drop%'
...
end;
更新:
eventdate()
XML 示例结果:
<EVENT_INSTANCE>
<EventType>**</EventType>
<PostTime>**</PostTime>
<SPID>**</SPID>
<ServerName>**</ServerName>
<LoginName>**</LoginName>
<UserName>**</UserName>
<DatabaseName>**</DatabaseName>
<SchemaName />
<ObjectName>**</ObjectName>
<ObjectType>**</ObjectType>
<TargetObjectName />
<TargetObjectType>**</TargetObjectType>
<TSQLCommand>
<SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON" QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE" />
<CommandText>
...
</CommandText>
</TSQLCommand>
</EVENT_INSTANCE>