Verwenden von MERGE in Integration Services-Paketen

In SQL Server 2008 Integration Services (SSIS) kann die SQL-Anweisung in einem Task "SQL ausführen" eine MERGE-Anweisung enthalten. Diese MERGE-Anweisung ermöglicht es Ihnen, in einer einzelnen Anweisung mehrere INSERT-, UPDATE- und DELETE-Vorgänge auszuführen.

In der Regel verwenden Sie die MERGE-Anweisung, wenn Sie Änderungen, die Einfügungen, Aktualisierungen und Löschungen umfassen, von einer Tabelle in die andere Tabelle übernehmen möchten. Vor SQL Server 2008 erforderte dieser Prozess sowohl eine Transformation für Suche als auch mehrere Transformationen für OLE DB-Befehl. Die Transformation für Suche hat eine zeilenweise Suche ausgeführt, um zu bestimmen, ob jede Zeile neu war oder geändert wurde. Die Transformationen für OLE DB-Befehl haben anschließend die notwendigen INSERT-, UPDATE- und DELETE-Vorgänge ausgeführt. In SQL Server 2008 kann eine einzelne MERGE-Anweisung sowohl die Transformation für Suche als auch die entsprechenden Transformationen für OLE DB-Befehl ersetzen.

Um die MERGE-Anweisung in einem Paket zu verwenden, führen Sie folgende Schritte aus:

  • Erstellen Sie einen Datenflusstask, der die Quelldaten in eine temporäre oder Stagingtabelle lädt, transformiert und speichert.

  • Erstellen Sie einen Task "SQL ausführen", der die MERGE-Anweisung enthält.

  • Verbinden Sie den Datenflusstask mit der Aufgabe "SQL ausführen", und verwenden Sie die Daten in der Stagingtabelle als Eingabe für die MERGE-Anweisung.

    HinweisHinweis

    Obwohl eine MERGE-Anweisung in diesem Szenario normalerweise eine Stagingtabelle erfordert, übersteigt die Leistung der MERGE-Anweisung normalerweise die Leistung der von der Transformation für Suche ausgeführten zeilenweisen Suche. Die MERGE-Anweisung ist außerdem nützlich, wenn die Größe einer Suchtabelle den Speicher testen würde, der der Transformation für Suche zum Zwischenspeichern der entsprechenden Verweistabelle zur Verfügung steht.

Im weiteren Verlauf dieses Themas werden einige zusätzliche Verwendungen für die MERGE-Anweisung erläutert. Weitere Informationen sowie Beispiele für die Verwendung des MERGE-Vorgangs finden Sie unter Einfügen, Aktualisieren und Löschen von Daten mithilfe von MERGE

Ein Beispiel für eine Zielkomponente, die die Verwendung der MERGE-Anweisung unterstützt, finden Sie im CodePlex-Communitybeispiel MERGE Destination.

Verwenden von MERGE mit inkrementellem Laden

Die neue Change Data Capture-Funktion in SQL Server 2008 erleichtert es, inkrementelles Laden in ein Data Warehouse zuverlässig auszuführen. Als Alternative zu parametrisierten Transformationen für OLE DB-Befehl zur Durchführung von Einfügungen und Aktualisierungen können Sie die MERGE-Anweisung verwenden, um beide Vorgänge zu kombinieren.

Weitere Informationen finden Sie unter Anwenden der Änderungen auf das Ziel.

Verwenden von MERGE in anderen Szenarios

In den folgenden Szenarios können Sie die MERGE-Anweisung entweder außerhalb oder innerhalb eines Integration Services-Pakets verwenden. Häufig ist jedoch ein Integration Services-Paket erforderlich, um diese Daten aus mehreren heterogenen Quellen zu laden und sie anschließend zu kombinieren und zu bereinigen. Deshalb könnten Sie erwägen, die MERGE-Anweisung in einem Paket zu verwenden, um die Wartung zu erleichtern.

Nachverfolgen von Kaufgewohnheiten

Die FactBuyingHabits-Tabelle im Data Warehouse erfasst das letzte Datum, an dem ein Kunde ein bestimmtes Produkt gekauft hat. Die Tabelle besteht aus den Spalten ProductID, CustomerID und PurchaseDate. Jede Woche generiert die Transaktionsdatenbank eine PurchaseRecords-Tabelle, in der die während dieser Woche getätigten Käufe enthalten sind. Das Ziel ist, mit einer einzigen MERGE-Anweisung die Informationen der PurchaseRecords-Tabelle in die FactBuyingHabits-Tabelle einzufügen. Für Produkt/Kunde-Paare, die nicht vorhanden sind, fügt die MERGE-Anweisung neue Zeilen ein. Für Produkt/Kunde-Paare, die vorhanden sind, aktualisiert die MERGE-Anweisung das letzte Kaufdatum.

Nachverfolgen der Preisentwicklung

Die DimBook-Tabelle repräsentiert die Liste der Bücher im Bestand eines Buchhändlers und identifiziert die Preisentwicklung für jedes Buch. Diese Tabelle enthält folgende Spalten: ISBN, ProductID, Price, Shelf und IsCurrent. Außerdem enthält die Tabelle eine Zeile für jeden Preis des Buchs in der Vergangenheit. Eine dieser Zeilen enthält den aktuellen Preis. Um anzugeben, welche Zeile den aktuellen Preis enthält, wird der Wert der Spalte IsCurrent für diese Zeile auf 1 gesetzt.

Jede Woche generiert die Datenbank eine WeeklyChanges-Tabelle, in der Preisänderungen und neue Bücher, die während der Woche in den Bestand aufgenommen wurden, enthalten sind. Mit einer einzigen MERGE-Anweisung können Sie die Änderungen der WeeklyChanges-Tabelle in die DimBook-Tabelle übernehmen. Die MERGE-Anweisung fügt neue Zeilen für neu hinzugefügte Bücher hinzu und aktualisiert die IsCurrent-Spalte für Zeilen vorhandener Bücher, deren Preis sich geändert hat, auf 0. Außerdem fügt die MERGE-Anweisung neue Zeilen für Bücher hinzu, deren Preis sich geändert hat, und legt den Wert der IsCurrent-Spalte für diese neuen Zeilen auf 1 fest.

Zusammenführen einer Tabelle mit neuen Daten aus der alten Tabelle

Die Datenbank formt die Eigenschaften eines Objekts mit einem "offenen Schema", das heißt, eine Tabelle enthält Name/Wert-Paare für jede Eigenschaft. Die Properties-Tabelle enthält drei Spalten: EntityID, PropertyID und Value. Eine NewProperties-Tabelle, bei der es sich um eine neuere Version der Tabelle handelt, muss mit der Properties-Tabelle synchronisiert werden. Um diese beiden Tabellen zu synchronisieren, können Sie eine einzelne MERGE-Anweisung verwenden, um die folgenden Vorgänge auszuführen:

  • Löschen Sie Eigenschaften aus der Properties-Tabelle, wenn sie in der NewProperties-Tabelle fehlen.

  • Aktualisieren Sie Werte für Eigenschaften in der Properties-Tabelle mit neuen Werten aus der NewProperties-Tabelle.

  • Fügen Sie neue Eigenschaften für Eigenschaften hinzu, die in der NewProperties-Tabelle vorhanden sind, jedoch in der Properties-Tabelle fehlen.

Dieser Ansatz ist in Szenarios nützlich, die Replikationsszenarios ähneln, deren Ziel darin besteht, Daten in zwei Tabellen auf zwei Servern synchronisiert zu halten.

Nachverfolgen des Bestands

Die Inventory-Datenbank umfasst eine ProductsInventory-Tabelle mit den Spalten ProductID und StockOnHand. In einer Shipments-Tabelle mit den Spalten ProductID, CustomerID und Quantity werden Produktlieferungen an Kunden verfolgt. Die ProductInventory-Tabelle muss täglich auf Basis der Informationen der Shipments-Tabelle aktualisiert werden. Mit einer einzigen MERGE-Anweisung kann der Bestand in der ProductInventory-Tabelle auf Grundlage der erfolgten Lieferungen reduziert werden. Wenn der Bestand für ein Produkt auf 0 reduziert wurde, kann diese MERGE-Anweisung die entsprechende Produktzeile auch in der ProductInventory-Tabelle löschen.

Integration Services (kleines Symbol) Bleiben Sie mit Integration Services auf dem neuesten Stand

Die neuesten Downloads, Artikel, Beispiele und Videos von Microsoft sowie ausgewählte Lösungen aus der Community finden Sie auf der Integration Services-Seite von MSDN oder TechNet:

Abonnieren Sie die auf der Seite verfügbaren RSS-Newsfeeds, um automatische Benachrichtigungen zu diesen Aktualisierungen zu erhalten.

Siehe auch

Verweis

Konzepte