Обработка откатов в операторе catch SQL Server - PullRequest
4 голосов
/ 09 декабря 2010

В моем чтении я видел два метода обработки отката транзакций в разделе CATCH в хранимой процедуре SQL Server:

1: if @@trancount > 0 ROLLBACK
2: if XACT_STATE() <> 0 ROLLBACK TRAN

Какой метод лучше и почему?

1 Ответ

7 голосов
/ 09 декабря 2010

Этот MSDN articl e является хорошим справочным материалом. Цитата:

И XACT_STATE, и @@ TRANCOUNT функции могут быть использованы для обнаружения есть ли у текущего запроса активная пользовательская транзакция. @@ TRANCOUNT не может быть использован для определения эта сделка была засекречена как незафиксированная транзакция. XACT_STATE не может быть использован для определения есть ли вложенные транзакции.

Скажем, вы хотели потенциально совершить транзакцию в некоторых обстоятельствах, тогда XACT_STATE поможет вам здесь, поскольку это определит, можно ли совершить транзакцию или нет, тогда как @@ TRANCOUNT не может вам этого сказать. Если вы просто хотите выполнить ROLLBACK, то любой из них сделает эту работу, так что это зависит от того, что вам действительно нужно.

...