SQL Server에서 rowversion 형식의 열을 계산할 때? 트랜잭션 커밋 또는 이전 (행 수정 작업과 함께)입니까? 커밋 된 트랜잭션이 이미 커밋 된 버전보다 낮은 버전으로 실제로 발생할 수 있는지 여부는 매우 중요하기 때문에 묻습니다.SQL Server에서 rowversion 열을 계산할 때
매우 기본적인 문제인 것으로 보이지만 MSDN 설명서는 그러한 정보를 제공하지 않습니다. 나는 어느 곳에서도 찾을 수 없었다.
SQL Server에서 rowversion 형식의 열을 계산할 때? 트랜잭션 커밋 또는 이전 (행 수정 작업과 함께)입니까? 커밋 된 트랜잭션이 이미 커밋 된 버전보다 낮은 버전으로 실제로 발생할 수 있는지 여부는 매우 중요하기 때문에 묻습니다.SQL Server에서 rowversion 열을 계산할 때
매우 기본적인 문제인 것으로 보이지만 MSDN 설명서는 그러한 정보를 제공하지 않습니다. 나는 어느 곳에서도 찾을 수 없었다.
쉽게 스크립트의 부부와 함께 볼 :
여기에 내 질문의 시각화입니다.
스크립트 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
당신이 볼 수 있듯이, 아직 확정되지 않은 ID
1
있는 행은, 낮은 rowversion
값이 지정되었습니다.
물론,이 방식이어야합니다. 트랜잭션은 첫 번째 스크립트에서 볼 수 있듯이 여러 문장으로 확장 될 수 있으며 자신의 트랜잭션이 설정 한 특정 rowversion
값을 쿼리하는 것을 포함하여 동일한 트랜잭션 내에서 테이블을 다시 쿼리 할 수 있습니다.