Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
Ein kommentiertes XML-Schemadefinition (XSD) oder XML-Data Reduced (XDR)-Schema. Das XML-Hilfsprogramm zum Massenladevorgang interpretiert dieses Zuordnungsschema und die Anmerkungen, die im Schema angegeben sind, um die SQL Server-Tabellen zu identifizieren, in die die XML-Daten eingefügt werden sollen.
Ein XML-Dokument oder Dokumentfragment (ein Dokumentfragment ist ein Dokument ohne ein einzelnes Element auf oberster Ebene). Ein Dateiname oder ein Datenstrom, aus dem XML-Massenladevorgang gelesen werden kann, kann angegeben werden.
Xml Bulk Load interpretiert das Zuordnungsschema und identifiziert die Tabellen, in die die XML-Daten eingefügt werden sollen.
Es wird davon ausgegangen, dass Sie mit den folgenden SQL Server-Features vertraut sind:
Kommentierte XSD- und XDR-Schemas. Weitere Informationen zu kommentierten XSD-Schemas finden Sie in der Einführung in kommentierte XSD-Schemas (SQLXML 4.0). Informationen zu kommentierten XDR-Schemas finden Sie unter "XDR-Schemas mit Anmerkungen" (veraltet in SQLXML 4.0).
SQL Server-Masseneinfügungsmechanismen, z. B. die Transact-SQL BULK INSERT-Anweisung und das bcp-Hilfsprogramm. Weitere Informationen finden Sie unter BULK INSERT (Transact-SQL) und bcp Utility.
Streamen von XML-Daten
Da das XML-Quelldokument groß sein kann, wird das gesamte Dokument nicht in den Arbeitsspeicher für die Massenlastverarbeitung gelesen. Stattdessen interpretiert XML-Massenladevorgang die XML-Daten als Datenstrom und liest sie. 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.
Transacted- und nontransacted XML-Massenladevorgänge
XML-Massenlast kann entweder in einem transacted- oder nichttransacted-Modus ausgeführt werden. 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 ohne Indizes leer.
Die Tabellen weisen Daten und eindeutige Indizes auf.
Der nichttransactierte Ansatz garantiert kein Rollback, wenn im Massenladevorgang ein Fehler auftritt (obwohl teilweise Rollbacks auftreten können). Die nichttransactierte Massenlast ist geeignet, wenn die Datenbank leer ist. Wenn ein Fehler auftritt, können Sie die Datenbank bereinigen und das XML-Massenladevorgang erneut starten.
Hinweis
Im nichttransactierten Modus verwendet XML-Massenladevorgang eine interne Standardtransaktion und führt einen Commit durch. 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. Beim XML-Massenladevorgang werden die Datensätze zuerst aus dem XML-Quelldokument in diesen temporären Dateien gespeichert. 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. (Xml-Massenladevorgang startet z. B. eine eigene Transaktion und führt einen Commit oder ein Rollback nach Bedarf durch.)
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. Wenn ein Fehler auftritt, gibt XML-Massenladevorgang die entsprechende Fehlermeldung zurück. Die Entscheidung, eine COMMIT- oder ROLLBACK-Anweisung auszufügen, bleibt dem Client überlassen, der die Massenlast initiiert 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.