In einem üblichen ETL Zyklus kommt es vor, dass eine Synchronisation zwischen der Ursprungs-und Zieltabelle stattfindet. Denn bei der Operation ist es wichtig, dass beide Tabellen auf dem aktuellen Stand sind. Ohne den MERGE
Befehl wäre es zwingend notwendig drei separate Befehle auszuführen: INSERT
, UPDATE
und DELETE
. Nicht nur ist das Ausführen aufwendig, es besteht ebenfalls die Gefahr, dass einem bei diesem Vorgehen ein Fehler unterläuft und Daten potenziell verloren gehen.
Die Lösung für dieses Problem stellt der MERGE
Befehl dar. Dieser ist vergleichbar mit dem UPSERT
Befehl von Oracle. Analog führen beide Befehle eine Operation mit den drei DML Befehlen aus. Hierbei ist es lediglich notwendig, seine Parameter und Bedingungen anzugeben.
Wie eben erwähnt führt der MERGE
Befehl INSERT
, UPDATE
und DELETE
zusammen aus. Notwendig ist es, dass Sie die Ursprungs-und Zieltabelle angeben. Außerdem, die Bedingungen, wie z.B. “Wenn es die Daten nur in einer Tabelle gibt, dann aktualisiere (UPDATE
) diese Tabelle”.
Legen Sie los!
- Identifizieren Sie den Namen der Zieltabelle.
- Identifizieren Sie den Namen der Ursprungstabelle.
- Verwenden Sie nun eine passende
ON
Bedingung, die die einzelnen Reihen miteinander übereinstimmen lässt. - Bestimmen Sie nun die Bedingungen, die zwischen Ziel- und Ursprungstabelle geprüft werden.
- Konfigurieren Sie daraufhin, was passieren soll, wenn die Bedingungen in Schritt 4 zutreffen.
In dem folgenden Beispiel wird die Tabelle Products als Zieltabelle verwendet. UpdatedProducts ist hierbei die Quelltabelle. Diese hat Produktinformationen, die noch nicht in Products vorhanden sind. Anschließend werden wir den MERGE
Befehl verwenden, um diese Differenz an Daten zu beheben.
Beispiel:
Erstellen wir zuerst die Tabellen und füllen sie mit Beispielwerten:
Nun wird, wie angekündigt, der MERGE
Befehl verwendet, um die Tabellen zu synchronisieren:
Wenn Sie diesen Befehl ausführen sehen Sie, dass es 2 Updates, 1 Delete und 1 Insert gab.
Wenn wir nun die Products Tabelle ausgeben lassen, sehen wir das Ergebnis des MERGE
Befehls.
Der MERGE
Befehl - Tipps und worauf zu achten ist
- Der
MERGE
Befehl benötigt ein ; als terminierendes Zeichen. Andernfalls wirft die SQL Instanz den Error 10713: “statement is executed without the statement terminator.“ - @@Rowcount gibt in dem Kontext die Anzahl der Tabellen wieder, die verändert wurden.
- Die Person, die den
MERGE
Befehl ausführt, muss über dieSELECT
,INSERT
,UPDATE
undDELETE
Berechtigungen auf den jeweiligen Tabellen verfügen. - Der
MERGE
Befehl verbessert die Performance im Vergleich zur Ausführung der drei separaten Befehle, da die Daten nur einmal, und nicht dreifach verarbeitet werden. - Für jede ausgeführte
INSERT
,UPDATE
oderDELETE
Aktion die durch denMERGE
Befehl ausgeführt wird, wird der jeweilige Trigger ebenso vollstreckt - soweit einer konfiguriert ist.
Fazit##
Abschließend lässt sich sagen, dass MERGE
einen elementaren Befehl für die Synchronisation von Daten bereitstellt. Zwar kann es zu Schwierigkeiten kommen den Befehl einmal richtig zu konfigurieren, doch bringt er einen enormen Vorteil gegenüber der Alternative. Falls es bei der Verwendung zu Problemen kommen sollte, zögern Sie nicht uns über unser Kontaktformular zu kontaktieren.