Использование триггера SQL Server, чтобы найти, какая процедура производит обновление - PullRequest
0 голосов
/ 21 апреля 2020

Я работаю с довольно большой программной платформой, которая использует Microsoft SQL Server 2008 R2. Я исследую очень редкую ошибку, когда что-то в базе данных обновляет первичный ключ (CID) ContactInfo до 0. В таблице есть два первичных ключа. CID связан с первичным ключом в другой таблице для хранения контактной информации.

Есть ли способ сделать существующий захват триггера обновления, какой хранимой процедурой выполняется обновление таблицы? Или, что еще лучше, есть ли способ записи данных Profiler в таблицу аудита, например оператор выполнения хранимой процедуры с входными параметрами? Мы могли бы непрерывно запускать трассировку Profiler, чтобы попытаться перехватить обновление в режиме реального времени, но нечастая ошибка привела бы к сохранению как минимум нескольких сотен гигабайт данных трассировки, что не вариант.

Ниже приведен мой код для существующей таблицы аудита. Есть 28 столбцов, поэтому я просто заменил их на [столбцы] для простоты и пространства.

ALTER TRIGGER [dbo].[wt_ContactInfo_U] 
ON [dbo].[ContactInfo]
FOR UPDATE AS 
    INSERT INTO [dbo].[ContactInfo_AUDIT] ( // columns )
        SELECT // columns
        FROM Deleted D
        WHERE
            CHECKSUM( // D.[columns]) NOT IN (SELECT CHECKSUM( // I.[columns])
                                              FROM INSERTED I
                                              WHERE I.[CID] = D.[CID])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...