2011-01-18 2 views
1

.NET에서 SQL Server를 사용하면 동일한 데이터 또는 별도의 연결을 사용하여 기본 데이터와 다른 별도 연결의 커밋되지 않은 변경 내용을 모두 읽을 수 있습니까?기본 트랜잭션과 커밋되지 않은 트랜잭션 데이터 모두 읽기

예를 들어

:

나는 트랜잭션을 시작하고 테이블에 아이디 == 1 레코드를 삽입하지만, 연결 2에서 그것을

를 범하지 않는 연결 1을 가지고, 나는을 읽고 싶습니다 해당 행이없는 테이블

Connection2 또는 Connection3부터 기존 행이있는 테이블을 읽고 싶습니다.

당신이 하나 개의 연결에서 "스냅 숏 격리"의 조합을 필요로하고 "커밋되지 않은 읽기"것 두 세트의 데이터를 읽으려면 :

+0

gbn이 정답입니다. 그러나 나는 당신에게 경고해야합니다 - 나는 성능상의 이유로 몇 년 전에이 길로 내려 갔고, 결국 문제를 야기 시켰습니다. 쿼리 속도를 높이려면 쿼리에 더 많은 시간을 할애하고 SQL Server가 잠금을 사용하여 올바른 작업을 수행하도록하십시오. – n8wrl

+0

왜? 각각의 연결은 다른 트랜잭션을 신경 쓰지 않아야합니다. – gbn

+0

[this] (http://stackoverflow.com/questions/4725512/)을 구현해야했지만 어쨌든 다른 솔루션을 사용했습니다. – enashnash

답변

0

예, 당신은 커밋

편집을 읽어 일명 더러운 읽기 활성화해야 또 다른.

YMMV. 그것은 뭔가 ... 내가 해봤

  1. , 당신은 내 커밋되지 않은 데이터를 검토 할 수 있습니다 아시다시피 내가
+0

커밋되지 않은 커밋을 읽는 것을 허용하는 커밋되지 않은 커밋을 알고 있지만 내 질문이 명확하지 않은 것 같아서 업데이트했습니다. 문제는 동일한 트랜잭션에 대한 기본 및 커밋되지 않은 변경 사항 모두에 액세스 할 수 있는가하는 것입니다. – enashnash

+0

나는 이것을 답으로 표시했지만, 결국 나는 내 질문에서 물어 보지 않았다. 단지 너무 편한 것 같았다. – enashnash

0

에 대한 자신감이있을 것이다

  • 에 대한 사용을 참조하십시오
  • 아니다 현재 세션은 다음과 같습니다 :

    CREATE TABLE TestTable 
    (
        ID int not null 
    ); 
    
    INSERT INTO TestTable(ID) values(1); 
    INSERT INTO TestTable(ID) values(2); 
    INSERT INTO TestTable(ID) values(3); 
    
    SELECT * FROM TestTable; 
    
    BEGIN TRANSACTION 
    
        INSERT INTO TestTable(ID) values(4); 
        INSERT INTO TestTable(ID) values(5); 
    
        --Although the transaction has not commited you can still see the records inserted from within the current sessions scope. 
        SELECT * FROM TestTable; 
    
    
    COMMIT TRANSACTION 
    
    DROP TABLE TestTable; 
    

    이제이 커밋되지 않은 데이터를 볼 수있는 다른 연결을 여는 위치를 가정합니다. NOLOCK 쿼리 힌트를 사용하여 쿼리 수준에서 그렇게 할 수 있습니다. 예 :

    SELECT * FROM TestTable WITH(NOLOCK) 
    
  • 관련 문제