Я создаю триггер обновления таблицы для аудита изменений данных ...
используемый код:
ALTER TRIGGER dbo.Tg_table_upd ON dbo.table
FOR UPDATE
AS
DECLARE @DATA DATETIME= GETDATE();
DECLARE @USER VARCHAR(20);
SELECT
@USER = CONVERT(VARCHAR, context_info)
FROM master..sysprocesses
WHERE spid = @@SPID;
INSERT INTO table_LOG
SELECT
*,
@USER,
@DATA,
0
FROM deleted;
END;
Выполните несколько тестов и он работает ... когда я запускаю обновление в dbo.table Я получил 1 или более строк, вставленных в таблицу аудита мая table_log .
Но в странной ситуации ... когда Java-приложение запускает определенный код обновления (захваченный SQL Profiler):
DECLARE @P1 INT;
SET @P1 = 68235;
EXEC sp_prepexec
@P1 OUTPUT,
N'@P0 nvarchar(4000),@P1 bigint,@P2 bigint,@P3 bigint,@P4 bigint,@P5 bigint,@P6 bigint,@P7 bigint,@P8 bigint,@P9 bigint,@P10 bigint,@P11 bigint,@P12 bigint,@P13 bigint,@P14 bigint,@P15 bigint,@P16 bigint,@P17 bigint,@P18 bigint,@P19 bigint,@P20 bigint,@P21 bigint,@P22 bigint,@P23 bigint,@P24 bigint,@P25 bigint,@P26 bigint,@P27 bigint,@P28 bigint,@P29 bigint,@P30 nvarchar(4000)',
N'update table set irc_status=@P0 where (irc_id in (@P1 , @P2 , @P3 , @P4 , @P5 , @P6 , @P7 , @P8 , @P9 , @P10 , @P11 , @P12 , @P13 , @P14 , @P15 , @P16 , @P17 , @P18 , @P19 , @P20 , @P21 , @P22 , @P23 , @P24 , @P25 , @P26 , @P27 , @P28 , @P29)) and irc_status=@P30 ',
N'XXX',
58074,
58079,
58082,
58086,
58091,
58095,
57880,
57879,
57874,
57873,
57953,
57959,
57954,
57960,
57785,
57790,
57779,
57784,
59113,
59110,
59116,
59119,
75840,
75851,
75843,
75852,
75834,
75844,
75842,
N'YYY';
SELECT
@P1;
Исходная таблица обновлена (затронуто 6 строк) ...
Но я не получаю строк в моей таблице аудита (table_log)
Глядя вперед в sql profiler ... Я могу подтвердить, что триггер был активирован, но при запуске оператора
SELECT
*,
@USER,
@DATA,
0
FROM deleted;
Профилировщик SQL показывает 0 затронутых строк ... Итак ... обновление было зафиксировано ... (затронуто 6 ros ... сработал триггер ... но есть пустая логическая таблица "Удалено" ...
Почему ??