2017-02-16 9 views
-2

트랜잭션 격리 수준에서 읽었으며 모든 것을 올바르게 이해하는지 잘 모르겠습니다. 도움이 필요해. 트랜잭션 격리 수준 문제

다음 CSHARP 의사 코드 고려하시기 바랍니다 : 저장 프로 시저 1, 열려있는 트랜잭션 저장 프로 시저 사용 2
  • 삽입 또는 갱신 표 1
  • 를 사용

    1. 을 삽입하거나 업데이트 테이블이 데이터를 기반으로 테이블 1에
    2. 트랜잭션을 커밋하십시오.

    3 단계에서 2 단계에서 업데이트 된 데이터를 어떻게 고려하지 않을 수 있습니까? 내 .Net 코드로 트랜잭션을 만들 때 트랜잭션 격리 수준을 설정해야합니까? 다음은 SQL 서버 저장 프로 시저 의사 코드입니다.

    select @count=count(*) from table1; 
    if @count > 1 
    update table2 
    
  • +0

    명확히하기 위해; 3 단계에서 2 단계 이전의 테이블 1의 데이터를 보길 원하십니까? –

    +0

    @DanDef : 10,000 피트 수준에서 그렇습니다. 100 피트 수준에서 3 단계는 훨씬 더 많은 작업을 수행하므로 단계의 순서를 변경할 수 없습니다. –

    답변

    1

    주문을 변경해도 문제가 해결되지 않습니까? 즉, 2 단계에서 표 1 데이터가 변경되고 3 단계를 실행하려면 그대로 유지해야하는 경우 3 단계를 먼저 실행하십시오. 그 결과는 다음과 같습니다

    1. 열기 거래를
    2. 절차 2
    3. 실행 절차 1
    4. 을 실행 닫기 트랜잭션 그냥 주석 것을 고려

    , 당신은 아마 필요 IsolationLevel.Snapshot을 사용하십시오. 그러나 일부 데이터베이스는 기본적으로이 옵션을 사용하지 않습니다.. 원본 테이블을 업데이트 할 때 기본적으로 tempdb에 현재 데이터 복사본이 만들어졌습니다.

    +0

    10,000 피트 수준에서, 당신 말이 맞습니다. 100 피트 수준에서 3 단계는 훨씬 더 많은 작업을 수행하므로 단계의 순서를 변경할 수 없습니다. –

    0

    필자가 알고있는 한, 격리 수준을 사용하면 수정 된 행의 이전 버전에 액세스 할 수 없습니다.

    당신이 원하는 것을 얻기 위해서는 변경된 내용을 추적하고 3 단계에서 사용할 수 있도록 2 단계를 수정해야합니다. 그렇지 않으면 2 단계에서 수정 된 테이블에 트리거를 추가해야합니다. 그런 식으로 변경 사항을 추적하십시오.