2016-08-23 2 views
-1

TRY CATCH으로 저장 프로 시저를 만들었습니다. CATCH 섹션에서 테이블 Error_Details에 오류를 저장하기 위해 다른 저장 프로 시저를 실행하고 있습니다.ROLLBACK에서 COMMIT SQL TRANSACTION

이제 C#에서 DbTransaction을 사용하여 오류에 따라 커밋하고 롤백 할 수 있습니다.

문제는 롤백이 테이블 Error_Details도 롤백되는 동안 발생합니다.

모든 항목을 롤백해야하지만 Error_Details 테이블이 아닌 옵션이 있습니까?

+0

접근 방식은 C# 측 또는 db 측에서 트랜잭션 처리 중 하나 여야하며 둘을 섞어서는 안됩니다. C# 측에서 DbTransaction을 원하면 sp에서 try catch를 제거하고 C# 측과 별도의 호출로 오류 로깅을 실행하십시오. 또는 SP에서 전체 트랜잭션 처리를 수행하고 C# 측의 DbTransaction을 제거하십시오. – ArunGeorge

답변

0

저장 프로 시저 자체의 트랜잭션을 사용하십시오. 아래의 사례를 참조하십시오.

BEGIN TRY 

    BEGIN TRANSACTION MyActivity 

    -- Your SQL COMMANDS 

COMMIT TRANSACTION MyActivity 
END TRY 

BEGIN CATCH 
    IF (@@TRANCOUNT > 0) 
    BEGIN 
     ROLLBACK TRANSACTION MyActivity  
    END 
    INSERT INTO ERROR_DETAILS --INSERTING ErrorInfo INTO LOG TABLE 
    SELECT 
     ERROR_NUMBER() AS ErrorNumber, 
     ERROR_SEVERITY() AS ErrorSeverity, 
     ERROR_STATE() AS ErrorState, 
     ERROR_PROCEDURE() AS ErrorProcedure, 
     ERROR_LINE() AS ErrorLine, 
     ERROR_MESSAGE() AS ErrorMessage 
END CATCH 
관련 문제