Sql Msg 8672,级别16,状态1,第1行MERGE语句多次尝试更新或删除同一行

Sql Msg 8672,级别16,状态1,第1行MERGE语句多次尝试更新或删除同一行,sql,sql-server,tsql,sql-server-2008,merge,Sql,Sql Server,Tsql,Sql Server 2008,Merge,我正在尝试执行更新/插入。。。我得到了错误:(Msg 8672,16级,状态1,第1行 MERGE语句多次尝试更新或删除同一行。当目标行与多个源行匹配时,会发生这种情况。MERGE语句无法多次更新/删除目标表的同一行。请优化ON子句以确保目标行最多与一个源行匹配,或使用GROUP BY子句对目标行进行分组行。 ) 当目标行与多个源行匹配时会发生这种情况。 MERGE语句不能多次更新/删除目标表的同一行 我认为这个错误是不言自明的 源表中有重复的行。因此,对于行表中的rowname=X行,在Tem

我正在尝试执行更新/插入。。。我得到了错误:(Msg 8672,16级,状态1,第1行 MERGE语句多次尝试更新或删除同一行。当目标行与多个源行匹配时,会发生这种情况。MERGE语句无法多次更新/删除目标表的同一行。请优化ON子句以确保目标行最多与一个源行匹配,或使用GROUP BY子句对目标行进行分组行。 )


当目标行与多个源行匹配时会发生这种情况。
MERGE语句不能多次更新/删除目标表的同一行

我认为这个错误是不言自明的

源表中有重复的行。因此,对于
表中的
rowname=X
行,在
Temp\u info
表中有多行
Rowno=X

SQL server希望知道源表中那些重复行中的哪一行用于更新目标表中的一行

[编辑]

针对您的回答:其中一个选项是在运行合并之前复制:

with cte
as
(
    select row_number() over(partition by RowNo order by DOB desc) RowNumber
    from Temp_info
)
delete cte
where RowNumber > 1

我使用
DOB
作为定义订单的字段,以了解最后一个订单是什么。将此字段替换为要用于订单的字段。

我在临时表中有一个重复的行号,但我想将重复行中的最后一行列成表
with cte
as
(
    select row_number() over(partition by RowNo order by DOB desc) RowNumber
    from Temp_info
)
delete cte
where RowNumber > 1