Я делаю это одним из двух способов, в зависимости от моих потребностей в данный момент. Оба включают использование переменной, которая сохраняет свое значение после отката.
1) Создайте значение DECLARE @Log varchar(max)
и используйте это: @SET @ Log = ISNULL (@ Log + ';', '') + 'Ваш новый журнал информации здесь' . Keep appending to this as you go through the transaction. I'll insert this into the log after the commit or the rollback as necessary. I'll usually only insert the @Log value into the real log table when there is an error (in the
CATCH` блок) или If I ' я пытаюсь отладить проблему.
2) создать DECLARE @LogTable table (RowID int identity(1,1) primary key, RowValue varchar(5000)
. Я вставляю это по мере прохождения транзакции. Мне нравится использовать предложение OUTPUT
для вставки фактических идентификаторов (и других столбцов с сообщениями, например, «УДАЛИТЬ элемент 1234») строк, используемых в транзакции, в эту таблицу с. Я добавлю эту таблицу в фактическую таблицу журнала после фиксации или отката по мере необходимости.