Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Msg 8672, Level 16, State 1, Line 1 Die MERGE-Anweisung hat versucht, dieselbe Zeile mehr als einmal zu AKTUALISIEREN oder zu LÖSCHEN

Dies passiert, wenn eine Zielzeile mit mehr als einer Quellzeile übereinstimmt.
Eine MERGE-Anweisung kann dieselbe Zeile der Zieltabelle nicht mehrmals AKTUALISIEREN/LÖSCHEN.

Der Fehler ist ziemlich selbsterklärend, denke ich.

Sie haben doppelte Zeilen in der Quelltabelle. Also für eine Zeile mit Rownumber = X in Rows Tabelle gibt es mehr als eine Zeile mit Rowno = X in Temp_info Tabelle.

Der SQL-Server möchte wissen, welche Zeile dieser doppelten Zeilen in der Quelltabelle für die Aktualisierung einer Zeile in der Zieltabelle verwendet werden soll.

[Bearbeiten]

Als Antwort auf Ihre Antwort:Eine der Optionen besteht darin, zu duplizieren, bevor Sie die Zusammenführung ausführen:

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

Ich habe DOB verwendet als das Feld, das die Reihenfolge definiert, um zu wissen, was das letzte ist. Ersetzen Sie dieses Feld durch das Feld, das Sie für die Bestellung verwenden möchten.