'테스트 오류'를 실행하면 예기치 않은 결과가 발생합니다. @@Trancount
을 확인하면 불일치를 피할 수 있다고 생각했습니다. 누구든지 오류를 롤백하는 더 나은 방법으로 나를 도울 수 있습니까? 중첩 된 모든 트랜잭션을 롤백하고 싶습니다. 저장 프로시 저는 자체적으로 중첩 될 수 있습니다.롤백이있는 경우 이러한 중첩 SQL Server 트랜잭션이 불일치 오류를 발생시키는 이유는 무엇입니까?
alter procedure TestErrors
as
begin
begin try
begin transaction
exec TestErrorsInner;
IF @@TRANCOUNT > 0
commit transaction;
end try
begin catch
IF @@TRANCOUNT > 0
rollback transaction;
select ERROR_MESSAGE();
end catch
end
alter procedure TestErrorsInner
as
begin
begin try
begin transaction
RAISERROR('Test Error',16,1);
IF @@TRANCOUNT > 0
commit transaction;
end try
begin catch
IF @@TRANCOUNT > 0
rollback transaction;
select ERROR_MESSAGE();
end catch
end
결과 :
테스트 오류
거래 횟수 후 EXECUTE는 의 불일치 번호 BEGIN 및 COMMIT 문을 나타냅니다. 이전 개수 = 1, 현재 개수 = 0
참조 : [SQL Server DBA 신화 - 중첩 트랜잭션이 실제로 발생했습니다] (http://www.sqlskills.com/blogs/paul/a-sql-server-dba-myth-a-day-2630) -nested-transactions-are-real /) –