私は、1 つの DB ですべての変更を取得し、それらを別の DB に同期するシンクロナイザー ソフトウェアを作成しています。T
この目的のために、テーブルに2 つの列を追加しました。
alter table T add LastUpdate rowversion, LastSync binary(8) not null default 0
これで、最後の同期以降に変更されたすべての行を簡単に選択できます。
select * from T where LastUpdate > LastSync
ただし、同期を実行した後、2 つのフィールドを等しくする必要があります。ただし、行を更新するとタイムスタンプも更新されるため、次のようにする必要があります。
update T set LastSync=@@DBTS+1 where ID=@syncedId
しかし、私は疑問に思っています-これは常に機能しますか? の値を読み取った@@DBTS
後、自分の行がコミットされる前に別のユーザーがどこかで行を挿入/更新した場合はどうなりますか? これは危険なコードですか?はいの場合、どうすれば改善できますか?