0
在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
值。