2012-06-09 2 views
11

중첩 된 트랜잭션이 무엇을 위해 좋은지 전혀 이해하지 못했습니다. 중첩 된 트랜잭션을 커밋하면 아무 것도 커밋하지 않고 단지 @@TRANCOUNT 만 감소시킵니다. 그리고 ROLLBACK은 모든 것을 롤백합니다. 그들은 변화를 어떻게중첩 된 트랜잭션의 목적

BEGIN TRANSACTION 
    //do an update 
    //do an insert 
COMMIT TRANSACTION 

가 중첩 된 트랜잭션을 사용할 필요가 왜 나에게 예를주고 사항 :이과의 차이는 무엇

BEGIN TRANSACTION 
    //do an update 
    BEGIN TRANSACTION 
    //do an insert 
    COMMIT TRANSACTION 
COMMIT TRANSACTION 

.

감사합니다, 페 타르

답변

8

중첩 된 트랜잭션은 코드가 실제로 커밋당신의 트랜잭션을 커밋하지 않고 거래 자체를 사용하는 다른 코드 (예를 들어 SP의)를 호출 할 수 있습니다.

즉, Safepoint를 사용하여 트랜잭션 내부를 롤백 할 수 있습니다.

여기에는 CodeProject article이 있습니다.

+0

중첩 트랜잭션을 사용하지 않고 safepoint를 사용할 수 있습니다. 스토어드 프로 시저는 좋은 지적입니다. 그러나 트랜잭션에서 스토어드 프로 시저를 사용하지 않거나 다른 코드를 호출하지 않으면 중첩 트랜잭션이 필요한 이유는 무엇입니까? 나는 끊임없이 중첩 된 트랜잭션을 가진 예제를 보았고 나는 그 중점을 보지 못했다. –

+0

중첩 된 트랜잭션은 외부 트랜잭션 코드를 호출 할 때만 유용합니까? –

+1

나는 당신이 동의하며 그들은 외부 트랜잭션 코드를 호출하는데 유용하다고 생각한다. 중첩 된 트랜잭션을 처리하기위한 SQL Server의 기술적 능력은 중요하며 모든 DB 시스템에서 사용할 수있는 것은 아닙니다. 언급 된 SPs와 같은 몇 가지 경우가 있습니다 (여기서 [SET XACT_ABORT ON']을 사용해야합니다 (http://stackoverflow.com/questions/1150032/what-is-the-benefit-of-using-set). -xact-at-in-a-stored-procedure-abort-on-a-store-procedure)) "자연스럽게"중첩 될 수 있습니다. 나는 명시적인 중첩 된 트랜잭션을 사용하지 않았다. – Lucero

0

다른 SP 호출을 포함하는 하나의 SP를 호출하는 시나리오가있는 경우. 내부 SP는 응용 프로그램과 독립적으로 호출 될 수도 있습니다. 이 경우에는 내부 거래뿐만 아니라 내부 SP (내부 SP)에 배치 할 필요가 있습니다.