RowVersion列とBinary(8)列を使用して、行が変更されたかどうかを追跡している状況があります。
理想的にはいつでも:
RowVersion != Binary(8)
その後、その記録に変更がありました。これに関する本当の問題は、2つの列を等しく設定するための適切な方法が見つからないことです。Binaryフィールドを更新すると、更新クエリはそのレコードのRowVersionフィールドをインクリメントします。Binaryフィールドを楽観的にインクリメントすることに混乱しましたが、ほとんど機能します。重要なのは、UPDATEクエリが影響を与えるレコードの総数だけBinaryフィールドをインクリメントする必要があるということです。行バージョンを一時停止する方法、または更新ステートメントの値を使用するために更新ステートメントの最後に何が表示されるかを決定する方法についてのアイデアはありますか?
わかりやすくするために、2つのフィールドを一致させるために機能する例を次に示します。
UPDATE [table] SET BinaryField = MyRowVersion +
(SELECT COUNT(*) FROM [table] WHERE (MyRowVersion != BinaryField))
WHERE (MyRowVersion != BinaryField)