Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Msg 8672, Mức 16, Trạng thái 1, Dòng 1 Câu lệnh MERGE đã cố CẬP NHẬT hoặc XÓA cùng một hàng nhiều hơn một lần

Đ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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách đổi tên cơ sở dữ liệu SQL Server bằng T-SQL

  2. SQL JOIN so với IN hiệu suất?

  3. SQL chọn nơi không có trong truy vấn con không trả về kết quả

  4. Hàm có giá trị bảng trong SQL Server là gì?

  5. SQL Server 2008 - Làm cách nào để trả về Loại bảng do người dùng xác định từ một hàm có giá trị bảng?