Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Msg 8672, livello 16, stato 1, riga 1 L'istruzione MERGE ha tentato di UPDATE o DELETE la stessa riga più di una volta

Ciò si verifica quando una riga di destinazione corrisponde a più di una riga di origine.
Un'istruzione MERGE non può UPDATE/DELETE la stessa riga della tabella di destinazione più volte.

L'errore è abbastanza autoesplicativo, credo.

Hai righe duplicate nella tabella di origine. Quindi per una riga con Rownumber = X in Rows tabella ci sono più di una riga con Rowno = X in Temp_info tabella.

SQL Server vorrebbe sapere quale riga di quelle righe duplicate nella tabella di origine utilizzare per l'aggiornamento su una riga nella tabella di destinazione.

[Modifica]

In risposta alla tua risposta:una delle opzioni è duplicare, prima di eseguire l'unione:

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

Ho usato DOB come il campo che definisce l'ordine di sapere qual è l'ultimo. Sostituisci questo campo con quello che desideri venga utilizzato per l'ordine.