Điều này xảy ra khi một hàng mục tiêu khớp với nhiều hơn một hàng nguồn.
Câu lệnh MERGE không thể CẬP NHẬT / XÓA cùng một hàng của bảng mục tiêu nhiều lần.
Tôi nghĩ rằng lỗi này khá dễ hiểu.
Bạn có các hàng trùng lặp trong bảng nguồn. Vì vậy, đối với một hàng có Rownumber = X
trong Rows
bảng có nhiều hơn một hàng với Rowno = X
trong Temp_info
bảng.
Máy chủ SQL muốn biết hàng nào từ các hàng trùng lặp đó trong bảng nguồn để sử dụng cho bản cập nhật trên một hàng trong bảng đích.
[Chỉnh sửa]
Đáp lại câu trả lời của bạn:một trong các tùy chọn là sao chép, trước khi chạy hợp nhất:
with cte
as
(
select row_number() over(partition by RowNo order by DOB desc) RowNumber
from Temp_info
)
delete cte
where RowNumber > 1
Tôi đã sử dụng DOB
là trường xác định thứ tự để biết cuối cùng là gì. Thay thế trường này bằng trường mà bạn muốn dùng để đặt hàng.