Обработка незафиксированной транзакции SQL SERVER

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

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 ответ

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

Другие вопросы по тегам