Upsert选项:rowversion vs datetime

问题描述 投票:1回答:1

很多时候我需要将一个大表的数据(让我们称之为源代码)移动到它的克隆(让我们称之为目标)。由于尺寸较大,而不仅仅是删除/插入所有内容,我更喜欢upsert。

为了方便起见,我们假设一个名为“id”的int PK col。

到目前为止,为了做到这一点,我使用了两个表中存在的datetime字段dbupddate,它保存了插入/更新行的最新时间。这是通过使用触发器完成的,对于任何插入/更新,将dbupddate设置为getdate()。

因此,到目前为止我的普通upsert代码看起来像:

update t set (col1=s.col1,col2=s.col2 etc)
from source s
inner join target t on s.id=t.id and s.dbupddate>t.dbupddate

insert target 
select * from source s
where not exists (select 1 from target t where t.id=s.id)

最近我偶然发现了rowversion。我已经阅读并理解了它的功能,但是我想知道在将dbupddate更改为rowversion而不是datetime的情况下有什么好处/缺点。

sql-server tsql clone upsert rowversion
1个回答
0
投票

虽然datetime包含在某些情况下可能有用的信息,但rowversion更可靠,因为系统日期时间始终存在变更和丢失准确性的风险。在你的情况下,我个人更喜欢rowversion的可靠性。

© www.soinside.com 2019 - 2024. All rights reserved.