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.