Einführung in XML-Massenladen (SQLXML 4.0)

Gilt für:SQL ServerAzure SQL-Datenbank

XML Bulk Load 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 Hilfsprogramm massenladen bietet jedoch eine bessere Leistung, wenn Sie große Mengen von XML-Daten einfügen müssen.

Die Execute-Methode des XML-Massenladenobjektmodells benötigt zwei Parameter:

  • Eine XML-Schemadefinition (XSD) mit Anmerkungen oder ein XDR-Schema (XML-Data Reduced). Das XML-Massenladen-Hilfsprogramm 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-Hilfsprogramm interpretiert das Zuordnungsschema und identifiziert die Tabelle(n), in die die XML-Daten eingefügt werden soll(en).

Es wird davon ausgegangen, 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 Hilfsprogramm die Daten liest, identifiziert es die Datenbanktabellen, generiert die entsprechenden Datensätze aus der XML-Datenquelle und sendet dann die Datensätze zum Einfügen an SQL Server.

Das folgende XML-Quelldokument besteht beispielsweise aus Customer-Elementen<> und <untergeordneten Order-Elementen>:

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

Da XML Bulk Load das <Customer-Element> liest, generiert es einen Datensatz für die Customertable. Wenn das <Endtag /Customer> gelesen wird, fügt XML Bulk Load diesen Datensatz in die Tabelle in SQL Server ein. Auf die gleiche Weise generiert XML Bulk Load beim Lesen des <Order-Elements> einen Datensatz für die Ordertable und fügt diesen Datensatz beim Lesen des <Endtags /Order> in die SQL Server Tabelle 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 normalerweise optimal, wenn Sie das Massenladen in einem nicht übersetzten Modus ausführen: Das heißt, die Transaction-Eigenschaft ist auf FALSE festgelegt, und eine der folgenden Bedingungen ist zutrifft:

  • 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.

Hinweis

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 für diese Transaktion keinen Commit auf.

Wenn die Transaction-Eigenschaft auf TRUE festgelegt ist, erstellt XML Bulk Load temporäre Dateien, eine für jede Tabelle, die im Zuordnungsschema identifiziert ist. 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 diese temporären Dateien mithilfe der TempFilePath-Eigenschaft angeben. Sie müssen sicherstellen, dass das SQL Server Konto, das mit XML-Massenladen verwendet wird, Zugriff auf diesen Pfad hat. Wenn die TempFilePath-Eigenschaft nicht angegeben wird, wird der In der TEMP-Umgebungsvariable angegebene Standarddateipfad verwendet, um die temporären Dateien zu erstellen.

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

Wenn die ConnectionString-Eigenschaft die Verbindungszeichenfolge festlegt und die Transaction-Eigenschaft auf TRUE festgelegt ist, wird XML Bulk Load in einem eigenen Transaktionskontext ausgeführt. (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 festgelegt ist, gibt XML Bulk Load keine COMMIT- oder ROLLBACK-Anweisung aus, wenn ein Erfolg bzw. ein Fehler auftritt. 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 das XML-Massenladen verwendet wird, sollte vom Typ ICommand sein oder ein ADO-Befehlsobjekt sein.

In SQLXML 4.0 kann ein ConnectionObject nicht verwendet werden, wenn die Transaction-Eigenschaft auf FALSE festgelegt ist. Der nicht übersetzte Modus wird mit einem ConnectionObject nicht unterstützt, da es unmöglich ist, mehr als eine IRowsetFastLoad-Schnittstelle in einer übergebenen Sitzung zu öffnen.