Я реализовал управление транзакциями в своей хранимой процедуре, но все равно получаю ошибку
Счетчик транзакций после EXECUTE указывает на несовпадающее количество операторов BEGIN и COMMIT.Предыдущий счетчик = 1, текущий счетчик = 0.
Когда ошибка произошла во внутренней программе, она автоматически откатывает все ожидаемые внешние процедуры (и после отката счетчик транзакций становится равным нулю), изатем SQL Server выполняет блок catch внешней программы и ожидает отката для транзакции, которую я открыл во внешней программе, что странно для меня.Я предполагаю, что когда SQL Server откатывает транзакцию, он откатывает все предыдущие txns, и я не уверен, почему он ожидает откат внешней транзакции еще раз (этот шаг уже был выполнен во время внутреннего отката txn).
Ниже приведен пример кода
create table A (ID int)
alter procedure p1 AS
begin try
begin transaction
insert into A values (1)
commit;
end try
begin catch
rollback transaction
end catch
alter procedure p2 AS
begin try
begin transaction
insert into A values ('A')
commit;
end try
begin catch
rollback transaction
end catch
alter procedure p3 AS
begin try
begin transaction
EXEC p1
EXEC p2
if @@TRANCOUNT > 0
commit;
end try
begin catch
if @@TRANCOUNT > 0
rollback transaction
PRINT ERROR_MESSAGE();
end catch
EXEC p3
Пожалуйста, дайте мне знать, если вам нужно что-нибудь еще.
Спасибо.