用每行的唯一值更新许多行,最大限度地减少往返次数

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

我需要用每行不同的新值更新许多(读取 5000 条以上)记录。我倾向于选项 2,但想向社区询问。

选项

  1. 我可以循环浏览条目并一次执行一个,但这是每个记录的一个往返。
  2. 我可以生成以下查询并使用executesql
  3. 我没有想到的事情。

我想要的等效查询是:

UPDATE dbo.MyTable SET MyField='SomeValue1' WHERE MyKey='MyKey1';
UPDATE dbo.MyTable SET MyField='SomeValue2' WHERE MyKey='MyKey2';
UPDATE dbo.MyTable SET MyField='SomeValue3' WHERE MyKey='MyKey3';
UPDATE dbo.MyTable SET MyField='SomeValue4' WHERE MyKey='MyKey4';
UPDATE dbo.MyTable SET MyField='SomeValue5' WHERE MyKey='MyKey5';
UPDATE dbo.MyTable SET MyField='SomeValue6' WHERE MyKey='MyKey6';
UPDATE dbo.MyTable SET MyField='SomeValue7' WHERE MyKey='MyKey7';
UPDATE dbo.MyTable SET MyField='SomeValue8' WHERE MyKey='MyKey8';
UPDATE dbo.MyTable SET MyField='SomeValue9' WHERE MyKey='MyKey9';
UPDATE dbo.MyTable SET MyField='SomeValue10' WHERE MyKey='MyKey10';
sql-server entity-framework-core
1个回答
0
投票

我一路上学到的一个技巧是使用表值构造函数作为临时数据源。事情是这样的:

select tgt.MyKey,
   tgt.MyField as [before],
   src.MyField as [after]
from dbo.MyTable as tgt
join (values
   ('MyKey1', 'SomeValue1'),
   ('MyKey2', 'SomeValue2')
) as src(MyKey, MyField)
   on src.MyKey = tgt.MyKey;

然后,一旦您确认之前/之后的外观符合您想要的方式,请将

select
更改为
update

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