Вам нужно использовать DDL_DATABASE_LEVEL_EVENTS
.С помощью этого event
вы можете регистрировать все события.
evendata()
Функция включает в себя всю информацию, которую вам нужно регистрировать.Например, тип события, имя объекта и так далее.Обратите внимание, что eventdata()
возвращает 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>