Това се случва, когато целевият ред съвпада с повече от един изходен ред.
Изразът MERGE не може да АКТУАЛИЗИРА/ИЗТРИВА един и същ ред от целевата таблица няколко пъти.
Според мен грешката е доста обяснима.
Имате дублиращи се редове в изходната таблица. Така че за един ред с Rownumber = X
в Rows
таблица има повече от един ред с Rowno = X
в Temp_info
таблица.
SQL сървърът би искал да знае кой ред от тези дублиращи се редове в таблицата източник да използва за актуализацията на един ред в целевата таблица.
[Редактиране]
В отговор на вашия отговор:една от опциите е да се дублират, преди да стартирате сливането:
with cte
as
(
select row_number() over(partition by RowNo order by DOB desc) RowNumber
from Temp_info
)
delete cte
where RowNumber > 1
Използвах DOB
като полето, което определя реда, за да се знае кое е последното. Заменете това поле с това, което искате да се използва за поръчка.