MSSQL: Что происходит при возникновении ошибки во время выполнения триггера? - PullRequest
2 голосов
/ 27 марта 2009

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

Ответы [ 2 ]

4 голосов
/ 27 марта 2009

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

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

Важно

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

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

См. Откаты и коммиты в хранимых процедурах и триггерах . Триггер и значение TRY / CATCH * здесь

0 голосов
/ 27 марта 2009

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

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

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

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