Ich verwende die MERGE-Anweisung, um Datensätze in meiner Datenbank einzufügen/zu aktualisieren.SQL Server MERGE mehrere Varianten Variationen
Meine Quellentabelle enthält drei Spalten, die verwendet werden, um festzustellen, ob ein Datensatz eingefügt oder aktualisiert werden muss. Mein Problem tritt in der ON-Klausel auf - die Zieltabelle und die Quelltabelle sind mit den drei Spalten verbunden, es gibt jedoch zahlreiche Variationen darüber, wie diese verknüpft werden könnten. (Siehe folgendes Beispiel)
Ich weiß, dass die AND/OR-Operatoren verwendet werden können, um dies zu erreichen, aber dies wird unordentlich und schwierig zu warten. Ich habe mich gefragt, ob es einen effizienteren Weg gibt?
Ein Beispiel für meinen Code ist unten:
MERGE Target_Table as t
USING (select @param1, @param2, @param3)
AS s (col1, col2, col3)
ON (t.col1 = s.col1
AND t.col2 = s.col2
AND t.col3 = s.col3)
OR (t.col1 = s.col2
AND t.col2 = s.col1
AND t.col3 = s.col3)
WHEN
MATCHED
THEN […update…]
WHEN
NOT
MATCHED
THEN […insert…]
Vielen Dank im Voraus!
Schwer zu sagen, was Sie für mich aufgelistet haben. Kann eine Spalte mit einer anderen Spalte in der anderen Tabelle übereinstimmen? Lesbarkeit ist fast so wichtig wie Leistung IMHO. Und obwohl ich mir sicher bin, dass Sie sich dessen bewusst sind, da Sie mehrere AND/OR-Operatoren verwenden, sollten Sie sich bei der Auswertung der SQL Server-Präzedenzfälle daran erinnern. https://msdn.microsoft.com/en-us/library/ms190276.aspx – scsimon
Hallo, vielen Dank für Ihre Antwort. Ja, die drei Variablen, die ich in der Quellentabelle verwende, können in beliebiger Reihenfolge mit jeder der drei Spalten in der Zieltabelle übereinstimmen. Zusätzlich habe ich das Beispiel auf drei Variablen beschränkt, aber es kann bis zu sechs geben. Ich würde gerne sehen, ob es eine schönere Möglichkeit gibt, die Daten auszuwerten und zu sehen, ob die Variablen in einer der Spalten gefunden werden. – ccalgie
Sind alle Parameter eindeutig oder können diese Werte gleich sein? Können zum Beispiel param1 und param2 beide "1" sein? –