Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

SQL Grundkurs 1: Die Sprache erlernen

MERGE mit dem MS SQL Server

Testen Sie unsere 2021 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Wie Sie das MERGE-Statement beim MS SQL Server verwenden, zeigt Ihnen dieses Video.

Transkript

In diesem Video möchte ich Ihnen zeigen, wie die MERGE-Anweisung bei Microsoft SQL-Server implementiert ist. Die MERGE-Anweisung ist eine sehr praktische Anweisung, mit der wir in der Lage sind, zwei unterschiedliche Datenstämme zu synchronisieren. Genauer genommen ist es nichts Anderes als eine Kombination aus einem "INSERT", einem "UPDATE" und einem "DELETE". Um Ihnen das Prinzip zu zeigen, habe ich folgende Tabellen vorbereitet. Wir haben bereits mehrmals unsere Artikelgruppen verwendet. In der Tabelle "Artikelgruppen" finden wir die Artikelgruppenkürzel und den jeweiligen Langtext dazu. Ich habe nun eine weitere Tabelle vorbereitet mit dem Namen "Gruppen 1". Diese unterscheidet sich geringfügig von der ersten Tabelle. Und zwar gibt es hier zwei weitere Datensätze, nämlich: "BR" für Blu-ray Discs und "BU" für Bücher und Zeitschriften. Weiters ist hier die Bezeichnung der Artikelgruppe "HH" von Haushalt auf Haushaltswaren geändert und die Artikelgruppe "SP" Spielwaren, die in der Stamm-Tabelle "Artikelgruppe" noch enthalten ist, fehlt hier. Nach einem Abgleich dieser beiden Tabellen sollen alle diese Änderungen sich in der Tabelle "Artikelgruppe" wiederspiegeln. Ohne MERGE wäre das eine Aufgabe, die drei Einzelschritte bedarf. Als Erstes müssten wir Änderungen einarbeiten. Dazu benötigen wir einen synchronisiertes Update zwischen den beiden Tabellen "Artikelgruppen" sowie "Gruppen 1". Für dieses Update joinen wir die beiden über das Kürzel. Zur besseren Unterscheidung habe ich hier bei den MERGE-Tabellen andere Spaltennamen genommen: "ID" und "Bezeichnungen" statt "Art.GR" und "GR.Text". Ich joine also über das Kürzel und möchte nur jene ändern, bei denen die Bezeichnung nicht mehr dieselbe ist, D.h. hier sollen Änderungen eingearbeitet werden. Mit anderen Worten: Nachdem wir diese Anweisung ausgeführt haben, muss sich die Bezeichnung "Haushalt" auf "Haushaltswaren" geändert haben. Führen wir das einmal aus. Eine Zeile betroffen. Sehen wir uns das Ergebnis an: Nun heißt die Artikelgruppe "HH" "Haushaltswaren" und nicht mehr "Haushalt". Um die Neuen hinzuzufügen, brauchen wir eine INSERT-Anweisung. Hinzugefügt werden sollen alle die, die es in der zweiten Tabelle, in dem Fall in der Tabelle "Gruppen" gibt, aber in der ersten in der Tabelle "Artikelgruppen" noch nicht. Um genau diese zu filtern, verwenden wir einen "AUTO JOIN" mit dem Kriterium, dass die "Art.GR"-Spalte aus der ersten Tabelle "NULL" sein muss. Damit bekommen wir genau diese zwei, die es hier nicht gibt, die Blue-Ray-Discs und die Bücher und Zeitschriften. Mit der INSERT-Anweisung fügen wir genau diese zwei Datensätze hier ein. Ich führe die Anweisung aus und kontrolliere das Ergebnis. Wir sehen, dass diese zwei Artikelgruppen hier angelegt worden sind. Letztendlich müssen noch die Spielwaren "SP" gelöscht werden, die gibt es in der Tabelle "Gruppen 1" nicht mehr. Dazu verwenden wir diese Löschanweisung, indem wir alle Artikelgruppen löschen, bei denen das Kürzel "Art.GR" nicht enthalten ist. Also "NOT IN" verwenden wir, um alle vorhandenen Artikelgruppenkürzel aus der anderen Tabelle, aus der zweiten Tabelle, zu filtern und wenn das Kürzel hier nicht enthalten ist, das ist eben die Löschbedingung. Ich führe diese Anweisung aus. Eine Zeile betroffen und ein Blick zur Kontrolle in die Tabelle "Artikelgruppen" zeigt mir, dass die Spielwaren nun nicht mehr enthalten sind. D.h. wir haben hier drei Anweisungen benötigt, um alle Änderungen hier einzuarbeiten. Ab dem SQL-Server 2008 gibt es hier die MERGE-Anweisung. Die MERGE-Anweisung ist eine Kombination dieser drei in Einem. D.h. wir können alle drei Arbeitsschritte hier durchführen. Bevor ich Ihnen das zeige, möchte ich allerdings die Änderungen wieder rückgängig machen. Um hier für den Test die Änderungen jeweils wieder rückgängig machen zu können, habe ich hier die Tabelle "Gruppen 2". Die "Gruppen 2" hat dieselbe Struktur wie die Tabelle "Gruppen 1", enthält aber die gleichen Datensätze, die die Tabelle "Artikelgruppen" in der Ausgangssituation hatte, D.h. ich muss jetzt nur hier jeweils in den Anweisungen "Gruppen 1" durch "Gruppen 2" ersetzen, die Anweisungen noch einmal ausführen und dann habe ich quasi die Daten wieder zurückgesetzt. Dadurch habe ich die Möglichkeit, das Ganze öfter auszuprobieren und mehrmals sozusagen zwischen den Datenbeständen zu wechseln. Also ich markiere gleich alle drei Anweisungen und führe sie aus. Nun habe ich alle Änderungen wieder rückgängig gemacht. Ich habe also in der Tabelle "Artikelgruppen" wieder meinen ursprünglichen Datenbestand. "Haushalt", "Bücher" und "Blu-ray Discs" sind weg; "Spielwaren" sind wieder da. Nun widmen wir uns der MERGE-Anweisung. Die MERGE-Anweisung hat eine Zieltabelle und eine Ausgangstabelle. Die Zieltabelle wäre in dem Fall die Tabelle "Wave.Artikelgruppen G". "USING" verwendet man bei "MERGE", um anzugeben, aus welcher Tabelle die Daten hineingemerget werden sollen. In dem Fall wäre das unsere Tabelle "Gruppen 1". Dann nehmen wir "M" für MERGER als Aliasnamen und ähnlich wie beim JOIN muss ich hier definieren über eine JOIN-Bedingung, wie diese beiden Tabellen zusammengefügt werden sollen. Nämlich, dass "G.Art.GR" , das heißt das Kürzel hier gleich der ID der anderen Tabelle entspricht. Also "M.ID". Über diese beiden Spalten kann ich den "JOIN" machen. Jetzt muss ich definieren: Was passiert, wenn es Übereinstimmungen gibt? Was passiert, wenn es in der Zieltabelle etwas nicht gibt, sprich, ein neuer Datensatz hinzugefügt werden muss und wenn in der Zieltabelle etwas vorhanden ist, das es in der Ursprungstabelle nicht mehr gibt. D.h. nicht mehr vorhandene Daten müssen ja gelöscht werden. Dazu verwendet man die Anweisungen "WHEN". Dann gibt es die Varianten "WHEN MATCHED" oder eben "WHEN NOT MATCHED", also wenn es Übereinstimmungen gibt oder wenn es keine Übereinstimmungen gibt. Außerdem wird hier noch unterschieden, oder kann unterschieden werden, auf welcher Seite z.B. "BY TARGET", das heißt, in meiner Zieltabelle gibt es etwas nicht. In unserem Fall wäre das die Tabelle "Artikelgruppen"; oder die Variante "WHEN NOT MATCHED BY SOURCE", D.h. es gibt etwas in der Zieltabelle, in der "Artikelgruppentabelle", aber in der "Gruppen 1", also der Tabelle, die hineingemerget wird, nicht. Das sind genau die drei Fälle, die wir vorher mit unserem "INSERT", "UPDATE" und "DELETE" abgedeckt haben. Zusätzlich müssen wir hier noch definieren: "WHEN". Das kommt hier einmal dazu, und wir legen fest, was in dem Fall passiert. In dem Fall, dass es Übereinkunft gibt, soll die Bezeichnung geändert werden, angepasst. Für den Fall, dass es Übereinstimmungen gibt, dann ändern wir: "UPDATE SET". Was ändern wir? Wir ändern den Gruppentext, D.h. in der Zieltabelle, und überschreiben ihn mit der Bezeichnung aus der Ausgangstabelle der Tabelle "Gruppen 1". Wir möchten aber nicht alle überschreiben, sondern nur jene, wo es Änderungen gibt. Deshalb kann ich hier auch eine Bedingung definieren in der gleichen Syntax wie in einer WHERE-Klausel, und diese wird hierbei "WHEN MATCHED" ergänzt. D.h. ich schreibe hier dazu "und die zwei Spalten sind unterschiedlich". "AND" kopieren wir die Spalten gleich hierher sind nicht gleich. Also Ausrufezeichen, ist gleich oder eben Kleiner-/Größer-Zeichen kombiniert, das ist in SQL egal. Also, wenn es Übereinstimmungen gibt und die Bezeichnungen unterschiedlich sind, dann passe die Bezeichnungen an. Das wäre die erste Variante. Für den Fall, dass es den Eintrag in der Zieltabelle noch nicht gibt, soll er eingefügt werden. Also kommt hier "INSERT" hinein. "INSERT" in die Spalten "Art.GR" und "GR.Text" sollen die Werte eingefügt werden "VALUES M.ID" und "M.Bezeichnungen". Für den Fall, dass in der Ursprungstabelle die Daten nicht enthalten sind, D.h. es gibt sie nicht mehr, sollen sie gelöscht werden. Dazu verwenden wir einfach die Anweisung "DELETE". Wir haben hier also eine Anweisung, die genau die drei vorhin beschriebenen Vorgänge "INSERT", "UPDATE" und "DELETE" in einer einzigen Anweisung kapselt. Führen wir sie nun aus. Ich markiere sie und starte den Vorgang. Wir bekommen die Rückmeldung: "4 Zeilen betroffen". Zur Erinnerung: 2 Datensätze mussten neu eingefügt werden, einer musste geändert werden und einer musste wieder gelöscht werden. Das sind in Summe 4 Datensätze. Kontrollieren wir nun das Ergebnis. Ich kopiere mir diese zwei SELECT-Anweisungen hierher, dann geht es schneller. D.h. in unserer Tabelle "Artikelgruppen" müssen wir nun denselben Inhalt vorfinden wie in der Tabelle "Gruppen 1". Mit anderen Worten: Der Text von "Haushalt" muss sich auf "Haushaltswaren" geändert haben, das ist der Fall. Bücher und Zeitschriften sowie Blu-ray Discs sind aufgenommen worden. Die Spielwaren finden wir nicht mehr. D.h. das MERGE hat funktioniert. Auch hier können wir natürlich relativ einfach das Ganze wieder Retour setzen, indem wir diese Anweisung kopieren und die dafür vorbereitete Tabelle "Gruppen 2" hier verwenden. Das ist der Vorteil, wenn ich einen Aliasnamen definiert habe, dann brauche ich nur an einer Stelle hier die Änderung vornehmen. Ich führe diese Anweisung nun aus und habe wieder 4 Zeilen geändert, aber jetzt sollten wir genau das gegenteilige Ergebnis vorfinden. Wenn wir in die Tabelle "Artikelgruppen" hineinschauen, heißt die Artikelgruppe wieder "Haushalt". Spielwaren sind wieder da und Bücher und Geschirr sind wieder verschwunden. In diesem Video haben Sie gesehen, wie die Syntax der MERGE-Anweisung bei Microsoft SQL-Server implementiert ist. MERGE, "Hineinmischen", sozusagen, realisiert ein "INSERT", "UPDATE" und "DELETE" in einem Vorgang und ist dazu da, um Änderungen zu übernehmen. Änderungen kann ich nachziehen, neue Datensätze zusätzlich einfügen und nicht mehr vorhandene Datensätze wieder entfernen.

SQL Grundkurs 1: Die Sprache erlernen

Arbeiten Sie sich in die Grundlagen der Datenbanksprache SQL am Beispiel von Microsoft SQL Server, Oracle und MySQL ein und lassen Sie sich die praktische Nutzung erklären.

14 Std. 40 min (112 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!