Триггер запускается после внесения изменений, поэтому, насколько я могу судить, нет доступа к значениям «до». EVENTDATA () определена, и нет условия для «предыдущего». В результате вам нужно будет просто записать текущее значение в журнал. Однако, если вы предварительно заполняете свой журнал этой командой:
INSERT INTO dbo.tblQueryAudit
(ObjectName, TSQLCommand)
SELECT
o.Name,m.definition
FROM sys.objects o
INNER JOIN sys.sql_modules m ON o.object_id=m.object_id
WHERE type='P'
Вы можете использовать свой триггер и при этом иметь полную картину всех изменений. Ваш журнал будет иметь все предыдущие версии, а также текущую версию каждой процедуры. Вы можете использовать мою версию триггера (см. Ниже), где у вас будет доступ к некоторым другим столбцам из sys.objects и sys.sql_modules, например:
uses_ansi_nulls
uses_quoted_identifier
is_schema_bound
null_on_null_input
principal_id
, что также может пригодиться для входа. альтернативная версия:
CREATE trigger trgDDLAuditQuery
on database
for alter_procedure
as
begin
set nocount on;
DECLARE @EventData xml
SET @EventData=EVENTDATA()
INSERT INTO dbo.tblQueryAudit
(ObjectName, TSQLCommand) --hope you have datetime column that defaults to GETDATE()
SELECT
o.Name,m.definition
FROM sys.objects o
INNER JOIN sys.sql_modules m ON o.object_id=m.object_id
WHERE o.Name=@EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'nvarchar(max)')
--modify as necessary AND type='P'
end
GO