Обработка незафиксированной транзакции 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
операции для каждого.