2012-08-01 3 views
10

안녕하십니까. TSQL의 중첩 된 트랜잭션에 대한 현재의 이해는 여러 트랜잭션 (하나의 "외부"트랜잭션 내부에 중첩 된 여러 트랜잭션)이있는 경우 모든 트랜잭션을 커밋해야합니다 ("외부"트랜잭션 사용) 마지막으로 데이터베이스가 변경 될 때까지). ? L 트 수가 열린 트랜잭션 수보다 작 으면 트랜잭션과 관련된 변경 g 항이 작성되지 않습니다. 중첩 된 트랜잭션의 작동 방식에 대한 올바른 개요입니까?TSQL의 중첩 된 트랜잭션

답변

12

COMMIT에 대한 설명이 정확합니다. Kalen의 기사에서 논의 된 바와 같이 롤백이 발생하는 위치

Kalen Delaney has an article covering the same type of behavior that you describe.

그러나, 중첩 된 트랜잭션 내 ROLLBACK가 아니라 내부 거래를 전체 외부 트랜잭션을 롤백합니다.

참고 다음과 같은 결과 : 이것은 MSDN 문서에서 설명하는

BEGIN TRAN 
SELECT @@trancount 
BEGIN TRAN 
SELECT @@trancount 
BEGIN TRAN 
SELECT @@trancount 

ROLLBACK TRAN 
SELECT @@trancount 

, Nesting Transactions :

이없는 롤백 WORK 또는 ROLLBACK TRANSACTION 문이 트랜잭션 이름 롤백 모든 중첩 트랜잭션 및 감소 @@ TRANCOUNT를 0으로 설정 트랜잭션을 사용하는 ROLLBACK TRANSACTION 중첩 트랜잭션 집합에서 가장 바깥 쪽 트랜잭션의 이름 은 중첩 된 트랜잭션을 모두 롤백하고 @@ TRANCOUNT 을 0으로 감소시킵니다. 트랜잭션에 이미 있는지 확신 할 수 없으면 SELECT @@ TRANCOUNT를 선택하여 1 이상인지 확인하십시오. @@ TRANCOUNT가 0이면 은 트랜잭션에 없습니다.

3

요약하면 대답은 '예'입니다. Nesting Transactions에서 : 내부 트랜잭션을 커밋

SQL Server 데이터베이스 엔진에 의해 무시됩니다. 트랜잭션은 가장 바깥 쪽 트랜잭션의 끝에서 수행 된 작업 에 따라 커밋되거나 롤백됩니다. 트랜잭션이 커밋되면 내부 중첩 트랜잭션도 커밋됩니다. 외부 트랜잭션이 롤백되면 내부 트랜잭션이 개별적으로 커밋되었는지 여부에 관계없이 모든 내부 내부 트랜잭션 도 롤백됩니다.

ROLLBACks에 대해서는 외부 트랜잭션 전체를 ROLLBACK 할 수 있습니다.

관련 문제