BEGIN-COMMIT 개수 불일치: 트랜잭션 개수 오류
저장 프로시저가 EXECUTE 문 내에서 다른 저장 프로시저를 호출하는 시나리오에서 거래 횟수가 일치하지 않으면 오류가 발생할 수 있습니다. 다음 오류 메시지는 이 문제를 보여줍니다.
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 1, current count = 0
근본 원인
이 오류는 일반적으로 호출자 저장 프로시저가 트랜잭션(BEGIN 사용)을 시작하고 호출 수신자가 저장 프로시저가 트랜잭션을 제대로 처리하지 않습니다. 예외.
조사
코드를 검토한 결과 호출 수신자 저장 프로시저가 TRY/CATCH 블록 내에서 트랜잭션 중단 또는 커밋되지 않은 트랜잭션을 확인하지 않는 것으로 나타났습니다. . 예외가 발생하면 트랜잭션을 적절하게 처리해야 합니다.
해결책
이 문제를 해결하려면 트랜잭션 상태를 적절하게 처리하도록 호출 수신자 저장 프로시저를 수정해야 합니다. . 다음 예는 권장 접근 방식을 보여줍니다.
CREATE PROCEDURE [usp_my_procedure_name] AS BEGIN SET NOCOUNT ON; DECLARE @trancount INT; SET @trancount = @@TRANCOUNT; BEGIN TRY IF @trancount = 0 BEGIN TRANSACTION ELSE SAVE TRANSACTION usp_my_procedure_name; -- Do the actual work here label exit: IF @trancount = 0 COMMIT; END TRY BEGIN CATCH DECLARE @error INT, @message VARCHAR(4000), @xstate INT; SELECT @error = ERROR_NUMBER(), @message = ERROR_MESSAGE(), @xstate = XACT_STATE(); IF @xstate = -1 ROLLBACK; IF @xstate = 1 AND @trancount = 0 ROLLBACK IF @xstate = 1 AND @trancount > 0 ROLLBACK TRANSACTION usp_my_procedure_name; RAISERROR ('usp_my_procedure_name: %d: %s', 16, 1, @error, @message); END CATCH END GO
추가 리소스
위 내용은 저장 프로시저에서 'EXECUTE 이후 트랜잭션 수가 일치하지 않는 BEGIN 및 COMMIT 문 수를 나타냅니다.' 오류를 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!