Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Съобщение 8672, ниво 16, състояние 1, ред 1 Операторът MERGE се опита да АКТУАЛИЗИРА или ИЗТРИВА същия ред повече от веднъж

Това се случва, когато целевият ред съвпада с повече от един изходен ред.
Изразът 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 като полето, което определя реда, за да се знае кое е последното. Заменете това поле с това, което искате да се използва за поръчка.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SqlDateTime.MinValue !=DateTime.MinValue, защо?

  2. Как мога да открия, че заявката за създаване, актуализиране, изтриване е успешна в Codeigniter

  3. Форматиране на sysjobhistory дата и време на колони в SQL Server

  4. Персонализирани низове с цифров формат, поддържани от FORMAT() в SQL Server

  5. Какво трябва да знаете за С NOCHECK, когато активирате ограничение CHECK в SQL Server