我需要用每行不同的新值更新许多(读取 5000 条以上)记录。我倾向于选项 2,但想向社区询问。
选项
我想要的等效查询是:
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';
我一路上学到的一个技巧是使用表值构造函数作为临时数据源。事情是这样的:
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
。