【发布时间】:2009-10-05 18:17:43
【问题描述】:
我正在创建一个触发器来跟踪过程文本的ALTERed。
在数据库 DDL 触发器中,
可以通过/EVENT_INSTANCE/TSQLCommand访问当前程序Text。
即使在调查EVENTDATA() 之后,它也不包含ALTER 之前的过程定义的值。
有没有办法检索以前的文本,例如如何使用DELETED 表访问 DML 触发器中已删除的值?
create trigger trgDDLAuditQuery
on database
for alter_procedure
as
begin
set nocount on;
declare @data xml
set @data = EVENTDATA()
insert dbo.tblQueryAudit(ObjectName, TSQLCommand)
select @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'nvarchar(256)'),
--; Only gets currently changed procedure text, not previous one
@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(max)')
end
GO
【问题讨论】:
标签: sql sql-server tsql ddl-trigger