Требуется ли оператор ROLLBACK TRANSACTION - PullRequest
0 голосов
/ 20 сентября 2019

При открытии явной транзакции, если происходит сбой, все ли операторы между BEGIN и COMMIT будут автоматически откатываться?Или вы должны выполнить оператор ROLLBACK.

В моем предыдущем опыте все между BEGIN и COMMIT автоматически откатывалось.Следовательно, что происходит, когда вам нужно выполнить оператор ROLLBACK, чтобы откатить его вручную?

1 Ответ

0 голосов
/ 20 сентября 2019

Это зависит от настроек сеанса и типа ошибки.Если это ошибка завершения оператора, то транзакция просто продолжается со следующего оператора.Если это ошибка завершения пакета, то транзакция прерывается.

Чтобы избежать проблем с ошибками завершения оператора, убедитесь, что вы ранее выполнили:

SET XACT_ABORT ON; 

, а затем все операторы-завершающие ошибки также прерывают транзакцию и откатываются.

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

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