我正在编写一个同步器软件,它将获取一个数据库中的所有更改并将它们同步到另一个数据库。为此,我在表中添加了T
两列:
alter table T add LastUpdate rowversion, LastSync binary(8) not null default 0
现在我可以轻松地选择自上次同步以来已更改的所有行:
select * from T where LastUpdate > LastSync
但是,在执行同步后,我应该使两个字段相等。但是更新行也会更新时间戳,所以我必须这样做:
update T set LastSync=@@DBTS+1 where ID=@syncedId
但我想知道 - 这会一直有效吗?如果我读取了 的值,@@DBTS
然后另一个用户设法在我的行被提交之前在某处插入/更新行怎么办?这是有风险的代码吗?如果是的话 - 它怎么能变得更好?