Обработка незафиксированной транзакции SQL SERVER - PullRequest
0 голосов
/ 10 ноября 2011

У меня есть процедура, которая имеет вид ниже

BEGIN TRY
BEGIN TRAN
...transactins A....
   BEGIN TRY
   .... Transaction B ....
   END TRY
   BEGIN CATCH
   .... Set variables and print messages ....
   END CATCH
....Transaction C
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
...Transaction D
END CATCH

Транзакция B выдает ошибку, и из-за этого процесс переходит в состояние uncommitable и выдает следующую ошибку. Я проверил значение XACT_STATE () это -1

Сообщение 3930, уровень 16, состояние 1, процедура xxxxxxxx, строка 70 Текущая транзакция не может быть зафиксирована и не может поддерживать операции записи в файл журнала. Откат транзакции.

Есть ли другой способ преодолеть это, если пропустить транзакцию B и выполнить транзакции C

1 Ответ

1 голос
/ 10 ноября 2011

Весь смысл использования транзакции состоит в том, что все операции внутри нее либо успешны, либо все проваливаются.Если вы хотите изолировать Transaction C от последствий сбоя Transaction B, тогда используйте отдельные операции BEGIN TRAN/COMMIT/ROLLBACK для каждой.

...