Einführung in XML-Massenladen (SQLXML 4.0)

Gilt für: SQL Server Azure 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 "Massenladevorgang" bietet jedoch eine bessere Leistung, wenn Sie große Mengen an XML-Daten einfügen müssen.

Die Execute-Methode des XML-Massenladeobjektmodells verwendet 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:

Streamen 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. Wenn das Hilfsprogramm die Daten liest, identifiziert es die Datenbanktabelle(n), generiert die entsprechenden Datensätze aus der XML-Datenquelle und sendet dann die Datensätze zur Einfügung an SQL Server.

Das folgende XML-Quelldokument besteht z. B. 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 </Customer-Endtag> 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 in der Regel optimal, wenn Sie massenweises Laden in einem nichttransactierten Modus ausführen: d. a. die Transaction-Eigenschaft ist auf FALSE festgelegt) und eine der folgenden Bedingungen gilt:

  • 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 Bulk Load keinen Commit für diese Transaktion 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 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 diese temporären Dateien mithilfe der TempFilePath-Eigenschaft angeben. Sie müssen sicherstellen, dass das sql Server-Konto, das mit XML-Massenladevorgang verwendet wird, Zugriff auf diesen Pfad hat. Wenn die TempFilePath-Eigenschaft nicht angegeben ist, wird der standarddateipfad, der in der TEMP-Umgebungsvariable angegeben ist, verwendet, um die temporären Dateien zu erstellen.

Wenn die Transaction-Eigenschaft auf FALSE (Standardeinstellung) festgelegt ist, verwendet XML-Massenladevorgang die OLE DB-Schnittstelle IRowsetFastLoad, um die Daten zu laden.

Wenn die ConnectionString-Eigenschaft die Verbindungszeichenfolge festlegt und die Transaction-Eigenschaft auf TRUE festgelegt ist, wird XML Bulk Load im 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 im Falle eines Erfolgs oder eines Fehlers 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-Massenladevorgang 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 nichttransactierte Modus wird mit einem ConnectionObject nicht unterstützt, da es unmöglich ist, mehr als eine IRowsetFastLoad-Schnittstelle in einer übergebenen Sitzung zu öffnen.