Einführung in XML-Massenladen (SQLXML 4.0)

XML-Massenladen ist ein eigenständiges COM-Objekt, mit dem Sie semistrukturierte XML-Daten in Microsoft SQL Server-Tabellen laden können.

Sie können XML-Daten in eine SQL Server-Datenbank einfügen, indem Sie eine INSERT-Anweisung und die OPENXML-Funktion verwenden. Das Massenladen-Dienstprogramm zeigt jedoch eine bessere Leistung beim Einfügen großer XML-Datenmengen.

Die Execute-Methode des XML-Massenladen-Objektmodells verwendet zwei Parameter:

  • Eine XML-Schemadefinition (XSD) mit Anmerkungen oder ein XDR-Schema (XML-Data Reduced). Das XML-Massenladen-Dienstprogramm interpretiert dieses Zuordnungsschema und die im Schema angegebenen Anmerkungen durch Identifizieren der SQL Server-Tabellen, in die die XML-Daten eingefügt werden sollen.

  • Ein XML-Dokument oder Dokumentfragment (ein Dokumentfragment ist ein Dokument ohne Einzelelement auf der obersten Ebene). Sie können einen Dateinamen oder einen Datenstrom angeben, von dem XML-Massenladen lesen kann.

Das XML-Massenladen-Dienstprogramm interpretiert das Zuordnungsschema und identifiziert die Tabelle(n), in die die XML-Daten eingefügt werden soll(en).

Es wird vorausgesetzt, dass Sie mit den folgenden SQL Server-Features vertraut sind:

Streaming von XML-Daten

Da das XML-Quelldokument unter Umständen groß ist, wird das gesamte Dokument für die Massenladenverarbeitung nicht in den Speicher gelesen. Stattdessen interpretiert XML-Massenladen die XML-Daten als Datenstrom und liest diesen. Während das Dienstprogramm die Daten liest, identifiziert es die Datenbanktabelle(n), generiert den entsprechenden Datensatz bzw. Datensätze aus der XML-Datenquelle und sendet den Datensatz bzw. die Datensätze zum Einfügen an SQL Server.

Zum Beispiel besteht das folgende XML-Quelldokument aus <Customer>-Elementen und untergeordneten**<Order>**-Elementen:

<Customer ...>
    <Order.../>
    <Order .../>
     ...
</Customer>
...

Während XML-Massenladen das <Customer>-Element liest, generiert es einen Datensatz für dieCustomer-Tabelle. Wenn XML-Massenladen das </Customer>-Endtag liest, fügt XML-Massenladen diesen Datensatz in die Tabelle in SQL Server ein. Auf gleiche Weise generiert XML-Massenladen beim Lesen des <Order>-Elements einen Datensatz für die Order-Tabelle und fügt diesen Datensatz dann in die SQL Server-Tabelle beim Lesen des </Order>-Endtags ein.

Transaktive und nicht durchgeführte XML-Massenladevorgänge

XML-Massenladen kann entweder in einem transaktiven oder einem nicht durchgeführten Modus operieren. Die Leistung ist in der Regel optimal, wenn Sie das Massenladen in einem nicht durchgeführten Modus vornehmen. Das heißt, die Transaction-Eigenschaft ist auf FALSE festgelegt und eine der folgenden Bedingungen ist wahr:

  • Die Tabellen, in die die Daten massengeladen werden, sind leer und ohne Indizes.

  • Die Tabellen weisen Daten und eindeutige Indizes auf.

Der nicht durchgeführte Ansatz garantiert keinen Rollback, wenn beim Massenladen ein Fehler auftritt (Teilrollbacks sind allerdings möglich). Das nicht durchgeführte Massenladen ist geeignet, wenn die Datenbank leer ist. Wenn ein Fehler auftritt, können Sie so die Datenbank bereinigen und das XML-Massenladen erneut starten.

HinweisHinweis

Im nicht durchgeführten Modus verwendet XML-Massenladen eine interne Standardtransaktion und führt einen Commit dafür aus. Wenn die Transaction-Eigenschaft auf TRUE festgelegt ist, ruft XML-Massenladen keinen Commit für diese Transaktion auf.

Wenn die Transaction-Eigenschaft auf TRUE gesetzt ist, erstellt XML-Massenladen temporäre Dateien, eine Datei für jede Tabelle, die im Zuordnungsschema identifiziert wird. XML-Massenladen speichert zunächst die Datensätze aus dem XML-Quelldokument in diesen temporären Dateien. Anschließend ruft eine Transact-SQL BULK INSERT-Anweisung diese Datensätze aus den Dateien ab und speichert sie in den entsprechenden Tabellen. Sie können den Speicherort für die temporären Dateien mit der TempFilePath-Eigenschaft angeben. Das für XML-Massenladen verwendete SQL Server-Konto muss auf diesen Pfad zugreifen können. Wenn die TempFilePath-Eigenschaft nicht angegeben ist, wird der in der TEMP-Umgebungsvariablen angegebene Standarddateipfad zum Erstellen der temporären Dateien verwendet.

Wenn die Transaction-Eigenschaft auf FALSE (Standardeinstellung) festgelegt ist, verwendet XML-Massenladen die OLE DB-Schnittstelle IRowsetFastLoad zum Massenladen der Daten.

Wenn die ConnectionString-Eigenschaft die Verbindungszeichenfolge festlegt und die Transaction-Eigenschaft auf TRUE gesetzt ist, arbeitet XML-Massenladen in einem eigenen Transaktionskontext. (Zum Beispiel startet XML-Massenladen eine eigene Transaktion und führt ggf. einen Commit oder Rollback aus.)

Wenn die ConnectionCommand-Eigenschaft die Verbindung mit einem vorhandenen Verbindungsobjekt festlegt und die Transaction-Eigenschaft auf TRUE gesetzt ist, gibt XML-Massenladen keine COMMIT- oder ROLLBACK-Anweisung im Erfolgsfall oder bei einem Fehler aus. Tritt ein Fehler auf, gibt XML-Massenladen die entsprechende Fehlermeldung zurück. Die Entscheidung, ob eine COMMIT- oder ROLLBACK-Anweisung ausgegeben wird, obliegt dem Client, der das Massenladen gestartet hat. Das Verbindungsobjekt, das für XML-Massenladen verwendet wird, sollte vom Typ ICommand oder ein ADO-Befehlsobjekt sein.

In SQLXML 4.0 kann ConnectionObject nicht mit einer auf FALSE festgelegten Transaction-Eigenschaft verwendet werden. Der nicht durchgeführte Modus wird nicht mit ConnectionObject unterstützt, da es nicht möglich ist, mehr als eine IRowsetFastLoad-Schnittstelle für eine übergebene Sitzung zu öffnen.