Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Msg 8672, poziom 16, stan 1, wiersz 1 Instrukcja MERGE próbowała UPDATE lub DELETE tego samego wiersza więcej niż raz

Dzieje się tak, gdy wiersz docelowy pasuje do więcej niż jednego wiersza źródłowego.
Instrukcja MERGE nie może wielokrotnie UPDATE/DELETE tego samego wiersza tabeli docelowej.

Myślę, że błąd jest dość oczywisty.

Masz zduplikowane wiersze w tabeli źródłowej. Więc dla jednego wiersza z Rownumber = X w Rows tabela zawiera więcej niż jeden wiersz z Rowno = X w Temp_info tabela.

Serwer SQL chciałby wiedzieć, który wiersz z tych zduplikowanych wierszy w tabeli źródłowej ma zostać użyty do aktualizacji jednego wiersza w tabeli docelowej.

[Edytuj]

W odpowiedzi na Twoją odpowiedź:jedną z opcji jest duplikowanie, przed uruchomieniem scalenia:

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

Użyłem DOB jako pole, które definiuje porządek, aby wiedzieć, co jest ostatnie. Zastąp to pole tym, którego chcesz użyć do zamówienia.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wywołanie procedury składowanej T-SQL przez ADO.NET powoduje wyjątek SqlTimeoutException

  2. jak pominąć zły wiersz w źródle pliku płaskiego ssis?

  3. Jak zmniejszyć rozmiar pliku danych w SQL Server (T-SQL)

  4. Efekt podpowiedzi NOLOCK w instrukcjach SELECT

  5. Milisekundy w moim DateTime zmieniają się, gdy są przechowywane w SQL Server