Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Msg 8672, Level 16, State 1, Line 1 Pernyataan MERGE mencoba untuk UPDATE atau DELETE baris yang sama lebih dari sekali

Ini terjadi bila baris target cocok dengan lebih dari satu baris sumber.
Pernyataan MERGE tidak dapat MEMPERBARUI/HAPUS baris yang sama dari tabel target beberapa kali.

Kesalahannya cukup jelas, saya pikir.

Anda memiliki baris duplikat di tabel sumber. Jadi untuk satu baris dengan Rownumber = X di Rows tabel ada lebih dari satu baris dengan Rowno = X di Temp_info tabel.

SQL server ingin mengetahui baris mana dari baris duplikat di tabel sumber yang akan digunakan untuk pembaruan pada satu baris di tabel target.

[Sunting]

Menanggapi jawaban Anda:salah satu opsi adalah menggandakan, sebelum menjalankan penggabungan:

with cte
as
(
    select row_number() over(partition by RowNo order by DOB desc) RowNumber
    from Temp_info
)
delete cte
where RowNumber > 1

Saya menggunakan DOB sebagai bidang yang mendefinisikan urutan untuk mengetahui apa yang terakhir. Ganti bidang ini dengan yang ingin Anda gunakan untuk pemesanan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendapatkan daftar semua tabel dalam database menggunakan TSQL?

  2. @@IDENTITY, SCOPE_IDENTITY(), OUTPUT dan metode lain untuk mengambil identitas terakhir

  3. Cara Instal sqlcmd &bcp di SUSE

  4. Bagaimana cara mengecualikan catatan dengan nilai tertentu di sql pilih

  5. 3 Cara untuk Mengetahui apakah Kolom adalah Kolom yang Dihitung di SQL Server