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
値を照会することを含め、同じトランザクション内のテーブルを自由に再クエリできます。