Откатываются ли триггеры в случае сбоя транзакции в SQL Server? - PullRequest
13 голосов
/ 18 февраля 2012

У меня есть несколько триггеров в некоторых таблицах, которые выполняют функцию, когда что-то удаляется или обновляется. Если во время транзакции выполняется триггер, а затем в транзакции происходит откат, выполняется ли откат триггера?

Ответы [ 2 ]

18 голосов
/ 18 февраля 2012

Да.

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

Nitpick - триггер является триггером, он не будет откатываться назад. эффекты триггера будут.

4 голосов
/ 18 февраля 2012

ОК, реальная транзакция, которая откатывается во время вставки / обновления / удаления, также откатывает любые действия, предпринятые триггером.Однако, если вы выполняете более одного действия в транзакции, обработка транзакции должна быть явной в вашем коде, чтобы откат произошел с ранними действиями.

Так что, если я удаляю из таблицы1 и триггер срабатывает изатем транзакция завершается неудачно, все откатывается.

Если я удаляю из таблицы 1 и срабатывает триггер, а я удаляю из таблицы 2 как часть того же сценария или хранимого proc или dynamicSQL, отправленного из приложения, тогда могут произойти две вещи,Если у вас есть формальная явная транзакция (которая правильно обрабатывает ошибки), все, что происходит, включая действия триггера, откатывается, если вы полагались на неявную транзакцию (которая только откатывает последнее действие), то она ничего не изменит дочасть, которая потерпела неудачу.

...