Sdílet prostřednictvím


Úvod do hromadného načítání XML (SQLXML 4.0)

platí pro:SQL Serverazure SQL Database

XML Bulk Load je samostatný COM objekt, který umožňuje načítat semistrukturovaná XML data do tabulek Microsoft SQL Server.

XML data můžete vložit do databáze SQL Server pomocí příkazu INSERT a funkce OPENXML; utility Bulk Load však poskytuje lepší výkon, když potřebujete vložit velké množství XML dat.

Metoda Execute v modelu objektu XML Bulk Load má dva parametry:

  • Anotovaná XML schéma definice (XSD) nebo XML-Data Reduced (XDR) schéma. Nástroj XML Bulk Load interpretuje toto mapovací schéma a anotace specifikované ve schématu při identifikaci SQL Server tabulek, do kterých mají být XML data vložena.

  • XML dokument nebo fragment dokumentu (fragment dokumentu je dokument bez jediného vrcholového prvku). Lze specifikovat název souboru nebo proud, ze kterého lze číst XML Bulk Load.

XML Bulk Load interpretuje mapovací schéma a identifikuje tabulky, do kterých mají být XML data vložena.

Předpokládá se, že znáte následující funkce SQL Serveru:

Streamování XML dat

Protože zdrojový XML dokument může být velký, celý dokument se nenačítá do paměti pro hromadné zpracování. Místo toho XML Bulk Load interpretuje XML data jako proud a čte je. Při čtení dat nástroj identifikuje databázové tabulky, generuje příslušné záznamy ze zdroje XML dat a poté odesílá záznam(y) SQL Serveru k vložení.

Například následující zdrojový XML dokument se skládá z <prvků zákazníka> a <podprvků objednávky> :

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

Když XML Bulk Load čte prvek <Customer> , generuje záznam pro Customertable. Když přečte <tag /Customer> end, XML Bulk Load vloží tento záznam do tabulky v SQL Serveru. Podobně, když čte prvek <Order> , XML Bulk Load vygeneruje záznam pro Ordertable a poté tento záznam vloží do tabulky SQL Server při čtení koncového tagu </Order> .

Transakční a netransaktované hromadné operace XML

XML Bulk Load může fungovat buď v režimu transakcí, nebo bez transkakcí. Výkon je obvykle optimální, pokud hromadně načítáte v režimu bez transakcí: tedy vlastnost Transaction je nastavena na FALSE) a platí jedna z následujících podmínek:

  • Tabulky, do kterých jsou data hromadně načítána, jsou prázdné a neobsahují žádné indexy.

  • Tabulky obsahují data a unikátní indexy.

Netransaktovaný přístup nezaručuje vrácení zpětného vkladu, pokud se při hromadném načítání něco pokazí (i když částečné vrácení zpět může nastat). Netranskované hromadné načítání je vhodné, když je databáze prázdná. Pokud se tedy něco pokazí, můžete databázi vyčistit a znovu spustit XML Bulk Load.

Poznámka:

V režimu bez transakcí XML Bulk Load používá výchozí interní transakci a commituje ji. Když je vlastnost Transaction nastavena na TRUE, XML Bulk Load nevolá commit na tuto transakci.

Pokud je vlastnost Transaction nastavena na TRUE, XML Bulk Load vytvoří dočasné soubory, jeden pro každou tabulku identifikovanou v mapovacím schématu. XML Bulk Load nejprve ukládá záznamy ze zdrojového XML dokumentu do těchto dočasných souborů. Poté příkaz BULK INSERT Transact-SQL tyto záznamy ze souborů načte a uloží je do příslušných tabulek. Umístění těchto dočasných souborů můžete určit pomocí vlastnosti TempFilePath. Musíte zajistit, že účet SQL Server používaný s XML Bulk Load má přístup k této cestě. Pokud vlastnost TempFilePath není specifikována, použije se výchozí cesta k souboru specifikovaná v proměnné prostředí TEMP k vytvoření dočasných souborů.

Pokud je vlastnost Transaction nastavena na FALSE (výchozí nastavení), XML Bulk Load používá rozhraní OLE DB IRowsetFastLoad k hromadnému načtení dat.

Pokud vlastnost ConnectionString nastaví string spojení a vlastnost Transaction je nastavena na TRUE, XML Bulk Load funguje ve svém vlastním transakčním kontextu. (Například XML Bulk Load zahajuje vlastní transakci a podle potřeby commituje nebo se vrací zpět.)

Pokud vlastnost ConnectionCommand nastaví spojení s existujícím objektem spojení a vlastnost Transaction je nastavena na TRUE, XML Bulk Load nezobrazí příkaz COMMIT nebo ROLLBACK v případě úspěchu nebo neúspěchu. Pokud dojde k chybě, XML Bulk Load vrátí příslušnou chybovou zprávu. Rozhodnutí o vydání příkazu COMMIT nebo ROLLBACK je ponecháno na klientovi, který hromadné načítání zahájil. Objekt spojení používaný pro XML Bulk Load by měl být typu ICommand nebo ADO příkazový objekt.

V SQLXML 4.0 nelze ConnectionObject použít s vlastností Transaction nastavenou na FALSE. Režim bez transakcí není u ConnectionObject podporován, protože není možné otevřít více než jedno rozhraní IRowsetFastLoad v rámci relace, která je předávána.