Das MERGE-Statement ist eine leistungsstarke Funktion in T-SQL, mit der Sie Daten aus einer Quelltabelle in eine Zieltabelle zusammenführen können, basierend auf bestimmten Bedingungen. Es vereint die Funktionalitäten von INSERT, UPDATE und DELETE in einer einzigen Anweisung und bietet eine effiziente Möglichkeit, Daten in einer Datenbank zu synchronisieren oder zu aktualisieren.

Syntax des MERGE-Statements

Die grundlegende Syntax des MERGE-Statements lautet wie folgt:

MERGE Zieltabelle AS Ziel
USING Quelltabelle AS Quelle
ON <Bedingung>
WHEN MATCHED THEN
    <Update-Anweisungen>
WHEN NOT MATCHED THEN
    <Insert-Anweisungen>
WHEN NOT MATCHED BY SOURCE THEN
    <Delete-Anweisungen>
OUTPUT <Ausgabeklausel>;

Beschreibung der Syntaxelemente:

  • Zieltabelle und Quelltabelle sind die Namen der Tabellen, die Sie zusammenführen möchten.
  • Bedingung definiert die Kriterien für die Übereinstimmung von Zeilen in der Quell- und Zieltabelle.
  • Update-Anweisungen werden ausgeführt, wenn eine Übereinstimmung zwischen Quell- und Zieltabelle gefunden wird.
  • Insert-Anweisungen werden ausgeführt, wenn keine Übereinstimmung zwischen Quell- und Zieltabelle gefunden wird.
  • Delete-Anweisungen werden ausgeführt, wenn keine Übereinstimmung zwischen Quell- und Zieltabelle gefunden wird, aber die Zeile in der Zieltabelle vorhanden ist.
  • Ausgabeklausel gibt die Ergebnisse des MERGE-Statements zurück.

Beispielverwendung des MERGE-Statements:

Angenommen, wir haben zwei Tabellen, “Kunden” und “NeueKunden”. Wir möchten die Daten aus der “NeueKunden”-Tabelle in die “Kunden”-Tabelle einfügen, wobei wir die vorhandenen Kunden aktualisieren, wenn es eine Übereinstimmung gibt. Andernfalls sollen neue Kunden hinzugefügt werden.

MERGE Kunden AS Ziel
USING NeueKunden AS Quelle
ON Ziel.KundenID = Quelle.KundenID
WHEN MATCHED THEN
    UPDATE SET Ziel.Name = Quelle.Name, Ziel.Email = Quelle.Email
WHEN NOT MATCHED THEN
    INSERT (KundenID, Name, Email) VALUES (Quelle.KundenID, Quelle.Name, Quelle.Email);

In diesem Beispiel wird das MERGE-Statement verwendet, um die Kundendaten zu aktualisieren oder hinzuzufügen, basierend auf der Kunden-ID. Wenn eine Übereinstimmung zwischen der “Kunden”- und “NeueKunden”-Tabelle gefunden wird, werden die Werte für “Name” und “Email” in der “Kunden”-Tabelle aktualisiert. Andernfalls werden die neuen Kundendaten in die “Kunden”-Tabelle eingefügt.

Zusammenfassung:

Das MERGE-Statement ist eine leistungsstarke Funktion in T-SQL, die INSERT, UPDATE und DELETE in einer einzigen Anweisung kombiniert. Es ermöglicht Ihnen, Daten aus einer Quelltabelle in eine Zieltabelle zu übertragen und dabei verschiedene Szenarien zu berücksichtigen, wie das Aktualisieren vorhandener Datensätze, das Hinzufügen neuer Datensätze oder das Löschen von Datensätzen, die in der Quelltabelle nicht mehr vorhanden sind.

Das MERGE-Statement folgt einer klaren Syntax, die aus Zieltabelle, Quelltabelle, Bedingungen und Aktionen besteht. Sie können die Bedingungen definieren, die bestimmen, wann eine Zeile in der Quell- und Zieltabelle übereinstimmt, und entsprechende Aktionen ausführen, basierend auf dem Übereinstimmungsergebnis.

Weitere Beispiele für die Verwendung des MERGE-Statements:

Aktualisierung von Bestandsdaten:

Angenommen, wir haben eine Tabelle “Produkte” und eine Tabelle “NeueProdukte”. Wir möchten den Lagerbestand der Produkte in der “Produkte”-Tabelle aktualisieren, basierend auf den Informationen in der “NeueProdukte”-Tabelle.

MERGE Produkte AS Ziel
USING NeueProdukte AS Quelle
ON Ziel.ProduktID = Quelle.ProduktID
WHEN MATCHED THEN
    UPDATE SET Ziel.Lagerbestand = Quelle.Lagerbestand;

Dieses Beispiel zeigt, wie das MERGE-Statement verwendet werden kann, um den Lagerbestand der Produkte in der Zieltabelle zu aktualisieren, wenn eine Übereinstimmung anhand der Produkt-ID gefunden wird.

Löschung von nicht mehr vorhandenen Daten:

Angenommen, wir haben eine Tabelle “Bestellungen” und eine Tabelle “NeueBestellungen”. Wir möchten Bestellungen aus der “Bestellungen”-Tabelle löschen, die in der “NeueBestellungen”-Tabelle nicht mehr vorhanden sind.

MERGE Bestellungen AS Ziel
USING NeueBestellungen AS Quelle
ON Ziel.BestellungsID = Quelle.BestellungsID
WHEN NOT MATCHED BY SOURCE THEN
    DELETE;

In diesem Beispiel wird das MERGE-Statement verwendet, um Bestellungen aus der “Bestellungen”-Tabelle zu löschen, die nicht mehr in der “NeueBestellungen”-Tabelle vorhanden sind. Die “NOT MATCHED BY SOURCE”-Klausel wird verwendet, um nicht übereinstimmende Zeilen in der Zieltabelle zu identifizieren und zu löschen.

Das MERGE-Statement bietet eine effiziente und elegante Möglichkeit, Daten in einer Datenbank zu aktualisieren und zu synchronisieren. Es reduziert die Anzahl der Abfragen und verbessert die Leistung, da alle Aktionen in einer einzigen Anweisung ausgeführt werden.

Fazit

Das MERGE-Statement ist eine mächtige Funktion in T-SQL, die es Ihnen ermöglicht, Daten aus einer Quelltabelle in eine Zieltabelle zusammenzuführen und dabei verschiedene Szenarien zu berücksichtigen. Es bietet eine effiziente Möglichkeit, Daten in einer Datenbank zu aktualisieren und zu synchronisieren. Durch die Kombination von INSERT, UPDATE und DELETE in einer einzigen Anweisung vereinfacht das MERGE-Statement komplexe Datenmanipulationen und verbessert die Leistung Ihrer Abfragen.

Von Michael