通过子查询返回一组值来更新sql表行

时间:2018-04-24 08:42:12

标签: sql-server

我想通过子查询更新表IVRecords set IVNO = value return

<Image src={imageObject.Url} onError={i => i.target.style.display='none'} />

但子查询返回多个值:254,325,25346,25346 我有超过58000条记录

那么如何使用子查询返回值来更新表IVRecords从[DVHead]中逐个选择a.IVNO a.DELIVERYNO = b.DELIVERYNO上的内连接[IVRecords] b?

IVRecords的IVNo具有由错误更新引起的重复值22644。 DVHead的IVNO是IVRecords的正确IVNO。所以我想把它们复制到有错误IVNo的IVRecords。 02表有关键DELIVERYNO。 我的预期结果: 之前:

While (Select Count(*) From [IVRecords] Where IVNO= '22644') > 0
Begin

    update [IVRecords] set IVNO= (Select  a.IVNO from [DVHead] a  inner join [IVRecords] b on a.DELIVERYNO=b.DELIVERYNO)

End

1 个答案:

答案 0 :(得分:2)

我认为这将是您的代码的基于集合的等效版本:

update ivr
    set ivr.ivno = a.ivno
from IVRecords ivr
    inner join DVHead a
        on ivr.deliveryNO = a.deliveryno
where ivr.ivno = '22664'

这应该比你的问题中的逐行(逐个)版本运行得快得多。

此外,这里有SQLFiddle代码如何工作。

(虽然,如果有些不对劲,请发布您拥有的数据和预期输出的示例)