SQL Server Merge -Anweisung

SQL Server Merge -Anweisung

Bei Datenbanken dreht sich alles um CRUD -Operationen. Wir erstellen, lesen, aktualisieren und löschen Daten in verschiedene Datenbanktabellen. Die meisten CRUD -Operationen in einer Datenbank erfordern jedoch separate Logik für Aufgaben wie das Einfügen, Aktualisieren und Löschen.

Dies kann schnell überflüssig werden. SQL Server bietet eine effiziente Möglichkeit, CRUD -Operationen mithilfe der Merge -Anweisung durchzuführen. Microsoft hat die Merge -Anweisung in SQL Server 2008 und höher eingeführt.

In diesem Tutorial wird verstehen.

Die Grundlagen

Nehmen wir ein Beispiel dafür, wo Sie zwei Tische haben. Die Ziel- und Quelltabellen. Wenn Sie die Werte in der Zieltabelle basierend auf den Werten aus den Quelltabellen aktualisieren müssen, können Sie drei Pfade aufnehmen:

  1. In der ersten ist, wo die Quelle fehlende Zeilen in der Zieltabelle enthält. Sie benötigen in einem solchen Fall eine Anweisung zur Zieltabelle.
  2. Die zweite ist, wobei die Zieltabelle fehlende Datensätze aus der Quellentabelle enthält. Hier benötigen wir eine Löschanweisung, um die Zeilen aus dem Ziel zu entfernen.
  3. Das letzte Szenario ist, wo ein Datensatz in Quelle und Target unterschiedliche Werte enthält. Wir benötigen in einem solchen Fall eine Aktualisierungsanweisung zur Zieltabelle.

Um die oben genannten Vorgänge einzeln auszuführen, müssen wir drei separate Logik zum Einfügen, Löschen und Aktualisieren von Vorgängen erstellen. Wir können sie jedoch mit der Merge -Anweisung kombinieren.

Wir können die Syntax der Merge -Anweisung wie gezeigt ausdrücken:

Merge target_table mithilfe von Source_table merge
Unter der Bedingung
Wenn sie angepasst
Dann update_operation
Wenn nicht übereinstimmt - nach Zieltabelle
Dann einfügen_operation
Wenn nicht mit der Quelle übereinstimmt
Dann löschen;

Wir identifizieren die Ziel- und Quellentabelle und geben sie in der Zusammenführungsklausel an. Wir geben dann eine Bedingung an. Die angegebene Bedingung steuert, wie die Zeilen aus der Quelltabelle mit den Zieltabellen übereinstimmen. Betrachten Sie es als eine Join -Bedingung.

Der nächste Block hält die Aktionen, die auf der Grundlage des Ergebnisses der angegebenen Bedingung durchgeführt werden sollen.

Wenn die Bedingung zu einer Übereinstimmung führt, aktualisieren wir die Datensätze in der Zieltabelle aus der Quellentabelle.

Wenn die Datensätze jedoch nicht übereinstimmen (aus der Zieltabelle), fügen wir die fehlenden Datensätze in die Zieltabelle ein.

Wenn die Datensätze (in der Zieltabelle) nicht übereinstimmt, löschen wir die unvergleichlichen Datensätze aus der Zieltabelle.

SQL Server - Beispiel zusammenführen

Nehmen wir ein einfaches Beispiel. Angenommen, wir haben zwei Tabellen mit Produktinformationen als Products_Target und product_source.

Das Beispielcode -Snippet zeigt die SQL -Abfragen zum Erstellen und Aktualisieren der angegebenen Tabellen an.

Salesdb verwenden;
TABLE Products_Target erstellen (
product_id int nicht null primäre Schlüsselidentität (1,1),
product_name varchar (255) nicht null,
Preisdezimal (10,2)
);
In Products_Target (product_name, Preis) einfügen)
Werte ('Office Desk', 531),
('Bürostuhl', 379.99),
('Wasserflasche', 69.99);
Table products_source erstellen (
product_id int nicht null primäre Schlüsselidentität (1,1),
product_name varchar (255) nicht null,
Preisdezimal (10,2)
);
In Products_Source einfügen (product_name, Preis)
Werte ('Office Desk', 531.00),
('Schreibtischlampe', 50.00),
('Office Chair', 699.99),
('Wasserflasche', 89.95);

Jetzt haben wir zwei Tabellen, die als Ziel und Quelle durchgeführt werden. Die in den Tabellen gespeicherten Datensätze sind wie gezeigt:

Um die Daten zwischen der Ziel- und Quellentabelle zu synchronisieren, können wir eine Merge -Abfrage ausführen, wie im folgenden Beispiel gezeigt:

Merge products_target als t
Mit Products_Source als s
Auf (s.product_id = t.Produkt ID)
Wenn sie angepasst
Dann Aktualisieren Sie den Set
T.product_name = s.Produktname,
T.Preis = s.Preis
Wenn nicht vom Ziel übereinstimmt
Dann einfügen (product_name, Preis)
Werte (s.product_name, s.Preis)
Wenn nicht mit der Quelle übereinstimmt
Dann löschen;

Sobald wir die obige Abfrage ausgeführt haben, führt der SQL -Server die angegebenen Operationen basierend auf der resultierenden Bedingung aus.

Wir können die Tabellen nach dem Zusammenführungsvorgang abfragen als:

Wählen Sie * aus Products_Source;
Wählen Sie * aus Products_Target;

Die resultierenden Werte sind wie im folgenden Beispiel gezeigt:


Wie Sie bemerken werden, werden die Quell- und Zieltabellensätze mit den aktualisierten, eingefügten und gelöschten Werten synchronisiert.

Abschluss

Diese Anleitung zeigt, wie Sie mit der SQL Server Merge -Anweisung arbeiten können. Sie können Einsatz-, Aktualisierungs- und Löschen von Vorgängen auf Tabellen basierend auf den resultierenden Bedingungen durchführen.

Vielen Dank für das Lesen!