sql >> Databáze >  >> RDS >> Sqlserver

Msg 8672, Level 16, State 1, Line 1 Příkaz MERGE se pokusil AKTUALIZOVAT nebo DELETE stejný řádek více než jednou

K tomu dochází, když cílový řádek odpovídá více než jednomu zdrojovému řádku.
Příkaz MERGE nemůže UPDATE/DELETE stejný řádek cílové tabulky vícekrát.

Myslím, že chyba je docela samovysvětlující.

Ve zdrojové tabulce máte duplicitní řádky. Tedy pro jeden řádek s Rownumber = X v Rows tabulka obsahuje více než jeden řádek s Rowno = X v Temp_info tabulka.

SQL server by rád věděl, který řádek z těchto duplicitních řádků ve zdrojové tabulce použít pro aktualizaci jednoho řádku v cílové tabulce.

[Upravit]

V reakci na vaši odpověď:jednou z možností je duplikovat před spuštěním sloučení:

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

Použil jsem DOB jako pole, které definuje pořadí, abychom věděli, co je poslední. Nahraďte toto pole tím, které chcete použít pro objednávku.




  1. Jak vytvořit balíček v Oracle SQL Developer?

  2. Vrátit seznam e-mailů odeslaných z SQL Server Database Mail (T-SQL)

  3. Jak se ujistit, že je vaše databáze MySQL zabezpečená

  4. Jak pomocí psql zobrazím seznam rozšíření nainstalovaných v databázi?