2017-02-13 7 views
0

SQL Server에서 rowversion 형식의 열을 계산할 때? 트랜잭션 커밋 또는 이전 (행 수정 작업과 함께)입니까? 커밋 된 트랜잭션이 이미 커밋 된 버전보다 낮은 버전으로 실제로 발생할 수 있는지 여부는 매우 중요하기 때문에 묻습니다.SQL Server에서 rowversion 열을 계산할 때

매우 기본적인 문제인 것으로 보이지만 MSDN 설명서는 그러한 정보를 제공하지 않습니다. 나는 어느 곳에서도 찾을 수 없었다.

Rowversion issue diagram

답변

2

쉽게 스크립트의 부부와 함께 볼 :

여기에 내 질문의 시각화입니다.

스크립트 1 :

create table T1 (
    ID int not null, 
    rv rowversion not null 
) 
go 
begin transaction 

insert into T1 (ID) values (1) 

WAITFOR DELAY '00:03:00' 

commit 

스크립트 2 :

begin transaction 
insert into T1 (ID) values (2) 
commit 
select * from T1 with (nolock) 

열기 스크립트와 같은 데이터베이스에 연결 둘. 스크립트 1을 실행하고 스크립트가 실행되는 동안 스크립트 2로 전환하여 실행하십시오.

당신이 결과를 얻을 수 (또는 유사) 것 :

ID   rv 
----------- ------------------ 
1   0x00000000000007D1 
2   0x00000000000007D2 

당신이 볼 수 있듯이, 아직 확정되지 않은 ID1있는 행은, 낮은 rowversion 값이 지정되었습니다.


물론,이 방식이어야합니다. 트랜잭션은 첫 번째 스크립트에서 볼 수 있듯이 여러 문장으로 확장 될 수 있으며 자신의 트랜잭션이 설정 한 특정 rowversion 값을 쿼리하는 것을 포함하여 동일한 트랜잭션 내에서 테이블을 다시 쿼리 할 수 ​​있습니다.