У нас есть хранимая процедура, которая запускает распределенную транзакцию через связанный сервер с разными базами данных MS SQL 2008.
Мы используем
SET XACT_ABORT ON;
а также
BEGIN TRY / CATCH blocks
вокруг транзакции, чтобы поймать любые ошибки и вернуть код ошибки и сообщение обратно вызывающему клиенту.
Однако, когда команда внутри распределенной транзакции терпит неудачу, кажется, что MS DTC берет на себя управление, и наш блок catch не может «изящно» откатиться и вернуть сообщение об ошибке и т. д. Вместо этого возникает ошибка: Координатор распределенных транзакций Microsoft (MS DTC) отменил распределенную транзакцию. (Ошибка 1206).
Есть ли способ, чтобы такая распределенная ошибка tx была обнаружена блоком catch?