Я кодирую триггер SQL Server 2005. Я хочу сделать некоторые записи во время выполнения триггера, используя инструкцию INSERT в моей таблице журнала. Когда возникает ошибка во время выполнения, я хочу вызвать ошибку и отменить действие, которое вызывает выполнение триггера, но не потерять записи журнала. Каков наилучший способ добиться этого?
Теперь мой триггер регистрирует все, кроме ситуации, когда возникает ошибка - из-за ROLLBACK. Оператор RAISERROR необходим для информирования вызывающей программы об ошибке.
Теперь мой код обработки ошибок выглядит следующим образом:
if (@err = 1)
begin
INSERT INTO dbo.log(date, entry) SELECT getdate(), 'ERROR: ' + out from #output
RAISERROR (@msg, 16, 1)
rollback transaction
return
end