Dzieje się tak, gdy wiersz docelowy pasuje do więcej niż jednego wiersza źródłowego.
Instrukcja MERGE nie może wielokrotnie UPDATE/DELETE tego samego wiersza tabeli docelowej.
Myślę, że błąd jest dość oczywisty.
Masz zduplikowane wiersze w tabeli źródłowej. Więc dla jednego wiersza z Rownumber = X
w Rows
tabela zawiera więcej niż jeden wiersz z Rowno = X
w Temp_info
tabela.
Serwer SQL chciałby wiedzieć, który wiersz z tych zduplikowanych wierszy w tabeli źródłowej ma zostać użyty do aktualizacji jednego wiersza w tabeli docelowej.
[Edytuj]
W odpowiedzi na Twoją odpowiedź:jedną z opcji jest duplikowanie, przed uruchomieniem scalenia:
with cte
as
(
select row_number() over(partition by RowNo order by DOB desc) RowNumber
from Temp_info
)
delete cte
where RowNumber > 1
Użyłem DOB
jako pole, które definiuje porządek, aby wiedzieć, co jest ostatnie. Zastąp to pole tym, którego chcesz użyć do zamówienia.