MSSQL: что происходит, когда возникает ошибка во время выполнения триггера?

Что касается триггеров обновления и вставки для MS SQL Server, есть ли способ сделать их атомарными? Другими словами, если во время триггера возникает ошибка, можно ли автоматически откатить исходную вставку или обновление?


person recursive    schedule 27.03.2009    source источник


Ответы (2)


Триггеры After автоматически являются частью оператора вставки/обновления/удаления атомарного DML в таблице.

Вы просто выполняете команду ROLLBACK TRAN в триггере, чтобы отменить всю работу в триггере и исходном операторе I/U/D. Также выполняется откат самого внешнего транса, если он есть.

Важно

Откат в триггере для SQL 2000 и более ранних версий прерывает выполнение пакета. Никакой код после оскорбительного I/U/D не запустится. см. отличную статью Эрланда и другой

Для SQL 2005 с TRY/CATCH выполнение перейдет к блоку CATCH, и ваш пакет (он же хранимый процесс и т. д.) завершится нормально.

См. раздел откаты и фиксации в хранимых процедурах и триггерах. . Триггер и взаимодействие TRY/CATCH находятся здесь

person gbn    schedule 27.03.2009

В MSDN есть хорошая статья о триггерах и транзакциях, расположенная здесь:

http://msdn.microsoft.com/en-us/magazine/cc164032.aspx

По сути, вы хотите использовать транзакции, чтобы сделать операцию атомарной.

person casperOne    schedule 27.03.2009