티스토리 뷰

예, 트랜잭션 시작과 커밋 (또는 롤백) 사이에 수행하는 모든 작업은 트랜잭션의 일부입니다.

-------------------

좋아, 감사합니다. 결국 이런 짓을하게 됐어 (05 일이라서)

    BEGIN TRY
       BEGIN TRANSACTION
       
              DO SOMETHING
              
                     COMMIT
                         END TRY
                             BEGIN CATCH
                                   IF @@TRANCOUNT > 0
                                            ROLLBACK
                                            
                                                  -- Raise an error with the details of the exception
                                                        DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
                                                              SELECT @ErrMsg = ERROR_MESSAGE(),
                                                                           @ErrSeverity = ERROR_SEVERITY()
                                                                           
                                                                                 RAISERROR(@ErrMsg, @ErrSeverity, 1)
                                                                                     END CATCH
                                                                                     
-------------------

나는 MS SQL Server에서 저장 프로 시저 실행이 트랜잭션 내에서 일어날 것이라고 믿지만, 이것에 매우주의해야합니다. 중첩 된 트랜잭션 (즉, 저장 프로 시저 외부의 트랜잭션과 저장 프로 시저 내부의 다른 트랜잭션)이있는 경우 롤백은 가장 가까운 엔 클로징 트랜잭션뿐 아니라 모든 트랜잭션에 영향을줍니다.

-------------------

Chris가 언급했듯이 트랜잭션 롤백에 대해주의해야합니다.

구체적으로 다음과 같습니다.

IF @@TRANCOUNT > 0 ROLLBACK

항상 원하는 것은 아닙니다. 이런 식으로 할 수 있습니다

IF(@@TRANCOUNT = 1) ROLLBACK TRAN
ELSE IF(@@TRANCOUNT > 1) COMMIT TRAN
RETURN @error

이런 식으로 호출하는 proc은 저장 프로 시저의 반환 값을 검사하고 커밋 할 것인지 아니면 오류를 계속 표시 할 것인지 결정할 수 있습니다.

그 이유는 'COMMIT'가 거래 카운터를 감소시키기 때문입니다. 트랜잭션 카운터를 0으로 줄이면 실제 커밋이 발생합니다.

-------------------

크리스제임스가 언급 한, 당신은 중첩 된 트랜잭션을 처리 할 때주의해야합니다. SQL Server Centra l Don Peterson이 작성한 트랜잭션 주제에 대한 아주 좋은 기사가 있습니다.이 기사를 읽어 보는 것이 좋습니다.

여기 있습니다 :

  • 1 부
  • 2 부
  • 3 부
-------------------

예, 모든 중첩 저장 프로 시저 호출이 트랜잭션 범위에 포함됩니다. SQL Server 2005 이상을 사용하는 경우 Try ... Catch도 사용할 수 있습니다. 여기 에 더 자세한 내용이 있습니다.

-------------------

@Chris, 나는 그것을 몰랐다.

더 많은 정보를 얻기 위해 인터넷 검색을 할 때 이것을 발견 했습니다 . 전체 트랜잭션을 롤백하지 않고 롤백 할 수있는 'savepoints'를 설정할 수 있습니다.

이 상황에서 유용 할 수 있습니다.



출처
https://stackoverflow.com/questions/180162
댓글
공지사항
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31