gpt4 book ai didi

sql-server - tsql批量更新

转载 作者:行者123 更新时间:2023-12-01 06:17:28 25 4
gpt4 key购买 nike

MyTableA 有几百万条记录。通常情况下,MyTableA 中的每一行都需要使用 TheirTableA 中的值进行更新。

不幸的是,我无法控制 TheirTableA,并且没有字段指示 TheirTableA 中的任何内容是否已更改,因此我要么只更新所有内容,要么基于比较可能不同的每个字段进行更新(不太可行,因为这是一个很长的过程)和宽 table )。

不幸的是,事务日志在直接更新时膨胀,所以我想通过使用 UPDATE TOP 将它分 block ,但是,据我所知,我需要一些字段来确定 MyTableA 中的记录是否已经更新,否则我'最终将陷入无限循环:

declare @again as bit;
set @again = 1;

while @again = 1
begin
update top (10000) MyTableA
set my.A1 = their.A1, my.A2 = their.A2, my.A3 = their.A3
from MyTableA my
join TheirTableA their on my.Id = their.Id

if @@ROWCOUNT > 0
set @again = 1
else
set @again = 0
end

如果我添加

,这是唯一可行的方法
where my.A1 <> their.A1 and my.A2 <> their.A2 and my.A3 <> their.A3

如果要比较许多列,这似乎效率低得可怕

我确定我错过了一个明显的替代方案?

最佳答案

假设两个表的结构相同,您可以使用以下方法获得不同行的结果集

SELECT * into #different_rows from MyTable EXCEPT select * from TheirTable 然后使用任何可用的关键字段从中更新。

关于sql-server - tsql批量更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6462265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com