簡體   English   中英

Upsert選項:rowversion與datetime

[英]Upsert options: rowversion vs datetime

很多時候,我需要將一個大表的數據(稱為源)移動到它的克隆(稱為目標)。 由於尺寸很大,我寧願向上插入,而不僅僅是刪除/插入全部。

為了簡便起見,我們假設一個名為“ id”的int PK col。

到目前為止,為了做到這一點,我使用了兩個表中都存在的datetime字段dbupddate,該字段保存了最近一次插入/更新行的時間。 這是通過使用觸發器完成的,該觸發器對於任何插入/更新都將dbupddate設置為getdate()。

因此,到目前為止,我的常規代碼看起來像這樣:

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時有什么好處/缺點。

盡管datetime包含在某些情況下可能有用的信息,但由於系統datetime始終有被更改和失去准確性的風險,因此rowversion更為可靠。 就您而言,我個人更喜歡rowversion的可靠性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM