Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Msg 8672, Level 16, State 1, Line 1 A instrução MERGE tentou UPDATE ou DELETE a mesma linha mais de uma vez


Isso acontece quando uma linha de destino corresponde a mais de uma linha de origem.
Uma instrução MERGE não pode atualizar/excluir a mesma linha da tabela de destino várias vezes.

O erro é bastante auto-explicativo, eu acho.

Você tem linhas duplicadas na tabela de origem. Então, para uma linha com Rownumber = X em Rows tabela há mais de uma linha com Rowno = X em Temp_info tabela.

O SQL Server gostaria de saber qual linha dessas linhas duplicadas na tabela de origem usar para a atualização em uma linha na tabela de destino.

[Editar]

Em resposta à sua resposta:uma das opções é duplicar, antes de executar a mesclagem:
with cte
as
(
    select row_number() over(partition by RowNo order by DOB desc) RowNumber
    from Temp_info
)
delete cte
where RowNumber > 1

Eu usei DOB como o campo que define a ordem para saber qual é o último. Substitua este campo pelo que você deseja que seja usado para o pedido.