2016-09-10 2 views
1

여러 개의 업데이트 문이있는 저장 프로 시저가 있습니다. try를 사용하고 싶지 않습니다. 저장 프로 시저를 롤백하고 원래 테이블을 다시 가져올 수 있습니까?전체 저장 프로 시저 롤백

할 수있는이 작품과 같은 -

시작 트랜잭션 T1 spName 롤백 트랜잭션 T1

+2

단일 트랜잭션으로 저장 프로 시저의 본문을 래핑 할 수 있습니다. –

+0

try catch를 사용하지 않는 이유는 무엇입니까? 당신의 proc은 기본적으로 구문 문제를 디버깅 할 수있게하는 것 외에는 아무 것도하지 않을 것입니다. – scsimon

+0

저장된 프로 시저의 쿼리는 매주 job.Now 동안 저장된 prc를 실행 한 후 원래 테이블로 되돌리려면 테스트하는 동안 원래 테이블을 어떻게 되 찾을 수 있습니까? #scsimon 당신은 올바른 요구 사항입니다. 내 요구 사항은 다른 것입니다. –

답변

2

예는

begin tran 
exec testproc 

commit tran 
--rollback tran --for condition 

심지어 위해 잘 작동 거래에 SPROC에 모든 것을 포장 할 수 있습니다 커밋뿐만 아니라 롤백

sproc 내부에 대한 경우 ope해야합니다 다른 트랜잭션을 캡처해야합니다.

DECLARE @vTranCount INT = @@TRANCOUNT 

--Commit 
IF (@vTranCount = 0 AND @@TRANCOUNT <> 0) COMMIT TRANSACTION --Commit if the Tran is created by this sproc 

--rollback during catch 
IF(@vTranCount = 0 AND @@TRANCOUNT > 0) ROLLBACK TRANSACTION --Rollback if the Tran is created by this sproc