Sql server 通过子查询返回的一组值更新sql表行

Sql server 通过子查询返回的一组值更新sql表行,sql-server,Sql Server,我想更新子查询返回的表IVRecords set IVNO=值 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 但是子查询返回多个值:25432

我想更新子查询返回的表IVRecords set IVNO=值

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
但是子查询返回多个值:254325346425346 我有超过58000张唱片

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

IVRecords的IVNo具有因错误更新而导致的重复值22644。DVHead的IVNO是正确的IVNO记录。所以我想把它们复制到有错误IVNo的IVR记录中。 02表具有键DELIVERYNO。 我的预期结果: 之前:



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

update ivr
    set ivr.ivno = a.ivno
from IVRecords ivr
    inner join DVHead a
        on ivr.deliveryNO = a.deliveryno
where ivr.ivno = '22664'
这应该比问题中的逐行(逐个)版本快得多

另外,这里有一个关于代码如何工作的例子


(尽管,如果有不正确的地方,请发布一个您拥有的数据和预期输出的示例)

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

update ivr
    set ivr.ivno = a.ivno
from IVRecords ivr
    inner join DVHead a
        on ivr.deliveryNO = a.deliveryno
where ivr.ivno = '22664'
这应该比问题中的逐行(逐个)版本快得多

另外,这里有一个关于代码如何工作的例子


(尽管,如果有不正确的地方,请发布您拥有的数据和预期输出的示例)

您实际上想在这里做什么?请查看我编辑的帖子您实际上想在这里做什么?请查看我编辑的帖子是真的吗?在我看来,只要表中有invo=22264条记录,他/她就想更新IVRecords表。确实令人困惑…@user3035133然后请发布一个示例,说明您现在拥有的数据以及预期的输出。@user3035133我的查询中有一个轻微的输入错误。请现在查看。仅受影响的两行。我有58045行需要更新编辑可能是ivr.ivno=22664的条件。但这是原始问题的一部分,这就是我为什么添加它的原因。真的吗?在我看来,只要表中有invo=22264条记录,他/她就想更新IVRecords表。确实令人困惑…@user3035133然后请发布一个示例,说明您现在拥有的数据以及预期的输出。@user3035133我的查询中有一个轻微的输入错误。请现在查看。仅受影响的两行。我有58045行需要更新编辑可能是ivr.ivno=22664的条件。但这是原始问题的一部分,这就是我添加它的原因。