sql >> Databasteknik >  >> RDS >> Sqlserver

Msg 8672, Level 16, State 1, Line 1 MERGE-satsen försökte UPPDATERA eller DELETE samma rad mer än en gång

Detta händer när en målrad matchar mer än en källrad.
En MERGE-sats kan inte UPPDATERA/RADERA samma rad i måltabellen flera gånger.

Felet är ganska självförklarande, tror jag.

Du har dubbletter av rader i källtabellen. Så för en rad med Rownumber = X i Rows tabell finns det mer än en rad med Rowno = X i Temp_info bord.

SQL-servern vill veta vilken rad från dessa dubbletter i källtabellen som ska användas för uppdateringen på en rad i måltabellen.

[Redigera]

Som svar på ditt svar:ett av alternativen är att duplicera, innan du kör sammanfogningen:

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

Jag använde DOB som fältet som definierar ordning för att veta vad som är det sista. Ersätt detta fält med det som du vill ska användas för beställning.




  1. Ändra kolumntyper i en stor tabell

  2. Aggregera data med hjälp av gruppfunktioner (gruppera efter orakel)

  3. Min MySQL-databas är skadad... Vad gör jag nu?

  4. Hur FORMAT() fungerar i MariaDB