Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
XML Bulk Load is een zelfstandig COM-object waarmee je semigestructureerde XML-data kunt laden in Microsoft SQL Server-tabellen.
Je kunt XML-gegevens invoegen in een SQL Server-database door een INSERT-instructie en de OPENXML-functie te gebruiken; echter, de Bulk Load-tool biedt betere prestaties wanneer je grote hoeveelheden XML-data moet invoegen.
De Execute-methode van het XML Bulk Load-objectmodel gebruikt twee parameters:
Een geannoteerde XML Schema Definitie (XSD) of XML-Data Reduced (XDR) schema. Het XML Bulk Load-programma interpreteert dit mappingschema en de annotaties die in het schema zijn gespecificeerd bij het identificeren van de SQL Server-tabellen waarin de XML-gegevens moeten worden ingevoegd.
Een XML-document of documentfragment (een documentfragment is een document zonder één enkel topniveau-element). Een bestandsnaam of een stroom waaruit XML Bulk Load kan lezen kan worden opgegeven.
XML Bulk Load interpreteert het mappingschema en identificeert de tabel(en) waarin de XML-gegevens worden ingevoegd.
Er wordt aangenomen dat je bekend bent met de volgende SQL Server-functies:
Geannoteerde XSD- en XDR-schema's. Voor meer informatie over geannoteerde XSD-schema's, zie Inleiding tot Geannoteerde XSD-schema's (SQLXML 4.0). Voor informatie over geannoteerde XDR-schema's, zie Annotated XDR Schemas (verouderd in SQLXML 4.0).
SQL Server bulk insert-mechanismen, zoals de Transact-SQL BULK INSERT-instructie en de bcp-hulp. Voor meer informatie, zie BULK INSERT (Transact-SQL) en bcp Utility.
Streaming van XML-gegevens
Omdat het bron-XML-document groot kan zijn, wordt het hele document niet in het geheugen gelezen voor bulkverwerking. In plaats daarvan interpreteert XML Bulk Load de XML-gegevens als een stroom en leest deze uit. Terwijl het hulpprogramma de gegevens leest, identificeert het de databasetabelle(s), genereert het de juiste record(s) uit de XML-databron en stuurt het vervolgens naar SQL Server voor invoeging.
Het volgende bron-XML-document bestaat bijvoorbeeld uit <Klant-elementen> en <Order-onder-elementen> :
<Customer ...>
<Order.../>
<Order .../>
...
</Customer>
...
Wanneer XML Bulk Load het <Customer-element> leest, genereert het een record voor de Customertable. Wanneer het de </Customer> endtag leest, voegt XML Bulk Load dat record in de tabel in SQL Server in. Op dezelfde manier genereert XML Bulk Load bij het lezen van het <Order-element> een record voor de Ordertable, en voegt dat record vervolgens in de SQL Server-tabel in na het lezen van de </Order> end-tag.
Getransacteerde en niet-getransacte XML Bulk Load-operaties
XML Bulk Load kan werken in zowel een getransacteerde als een niet-getransacte modus. De prestaties zijn meestal optimaal als je bulk laadt in een niet-getransacte modus: dat wil zeggen, de Transaction-eigenschap staat op FALS) en een van de volgende voorwaarden geldt:
De tabellen waarin de data in bulk wordt geladen zijn leeg en hebben geen indexen.
De tabellen bevatten gegevens en unieke indexen.
De niet-getransacte aanpak garandeert geen rollback als er iets misgaat in het bulkloadproces (hoewel gedeeltelijke rollbacks kunnen voorkomen). De niet-getransacte bulkbelasting is geschikt wanneer de database leeg is. Dus als er iets misgaat, kun je de database opschonen en opnieuw beginnen met XML Bulk Load.
Opmerking
In de niet-getransacte modus gebruikt XML Bulk Load een standaard interne transactie en commit deze. Wanneer de Transaction-eigenschap op TRUE is gezet, roept XML Bulk Load geen commit aan op deze transactie.
Als de Transaction-eigenschap op TRUE is gezet, creëert XML Bulk Load tijdelijke bestanden, één voor elke tabel die in het mappingschema is geïdentificeerd. XML Bulk Load slaat eerst de records van het bron-XML-document op in deze tijdelijke bestanden. Vervolgens haalt een Transact-SQL BULK INSERT-instructie deze records uit de bestanden op en slaat ze op in de bijbehorende tabellen. Je kunt de locatie van deze tijdelijke bestanden specificeren door de TempFilePath-eigenschap te gebruiken. Je moet ervoor zorgen dat het SQL Server-account dat met XML Bulk Load wordt gebruikt toegang heeft tot dit pad. Als de eigenschap TempFilePath niet is gespecificeerd, wordt het standaardpad dat in de TEMP-omgevingsvariabele is opgegeven gebruikt om de tijdelijke bestanden te maken.
Als de Transaction-eigenschap is ingesteld op FALSE (de standaardinstelling), gebruikt XML Bulk Load de OLE DB-interface IRowsetFastLoad om de data in bulk te laden.
Als de ConnectionString-eigenschap de verbindingsstring instelt en de Transaction-eigenschap op TRUE, werkt XML Bulk Load in zijn eigen transactiecontext. (Bijvoorbeeld, XML Bulk Load start zijn eigen transactie en commit of rollt terug indien nodig.)
Als de ConnectionCommand-eigenschap de verbinding met een bestaand verbindingsobject instelt en de Transaction-eigenschap op TRUE, geeft XML Bulk Load geen COMMIT- of ROLLBACK-instructie uit in het geval van een succes of een mislukking, respectievelijk. Als er een fout is, geeft XML Bulk Load het juiste foutmelding terug. De beslissing om een COMMIT- of ROLLBACK-verklaring te geven, wordt overgelaten aan de client die de bulkbelasting heeft gestart. Het verbindingsobject dat wordt gebruikt voor XML Bulk Load moet van het type ICommand zijn of een ADO-commandoobject zijn.
In SQLXML 4.0 kan een ConnectionObject niet worden gebruikt met de eigenschap Transactie op FALS. De niet-getransacteerde modus wordt niet ondersteund met een ConnectionObject omdat het onmogelijk is om meer dan één IRowsetFastLoad-interface te openen tijdens een doorgegeven sessie.