Megosztás a következőn keresztül:


Bevezetés az XML tömeges terhelésbe (SQLXML 4.0)

A következőkre vonatkozik:SQL ServerAzure SQL Database

Az XML Bulk Load egy önálló COM objektum, amely lehetővé teszi, hogy félig strukturált XML adatokat töltsünk be Microsoft SQL Server táblákba.

XML adatokat lehet beilleszteni egy SQL Server adatbázisba egy INSERT utasítással és az OPENXML funkcióval; azonban a Bulk Load segédeszköz jobb teljesítményt nyújt, ha nagy mennyiségű XML adatot kell beilleszteni.

Az XML Bulk Load objektummodell Execute módszere két paramétert vesz igénybe:

  • Egy annotált XML séma definíció (XSD) vagy XML-Data redukált (XDR) séma. Az XML Bulk Load segédeszköz értelmezi ezt a leképezési sémát és a sémában megadott annotációkat az SQL Server táblák azonosítására, amelyekbe az XML adatokat kell beilleszteni.

  • XML dokumentum vagy dokumentumtöredék (a dokumentumtöredék olyan dokumentum, amelynek nincs egyetlen felső szintű eleme). Meg lehet határozni egy fájlnév vagy egy olyan stream, amelyből XML Bulk Load olvasható.

Az XML Bulk Load értelmezi a leképezési sémát, és azonosítja azokat a táblákat(okat), amelyekbe az XML adatokat kell behelyezni.

Feltételezzük, hogy ismered az alábbi SQL Server funkciókat:

XML adatok streamelése

Mivel a forrás XML dokumentum lehet nagy, az egész dokumentumot nem olvasják fel a memóriába tömeges terhelési feldolgozáshoz. Ehelyett az XML Bulk Load az XML adatokat folyamként értelmezi és olvasja azt. Ahogy a segédprogram olvassa az adatokat, azonosítja az adatbázis táblát(okat), generálja a megfelelő rekord(okat) az XML adatforrásból, majd elküldi az adatokat az SQL Servernek beillesztésre.

Például a következő forrás XML dokumentum Ügyfél<> elemekből és <Order> gyermekelemekből áll:

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

Ahogy az XML Bulk Load olvassa az <Ügyfél> elemet, egy rekordot generál a Customertable számára. Amikor elolvassa a </Customer> end címkét, az XML Bulk Load beilleszti ezt a rekordot az SQL Server táblájába. Ugyanígy, amikor a Order> elemet olvassa<, az XML Bulk Load generál egy rekordot a Ordertable számára, majd a /Order> végtag olvasása< után beilleszti azt az SQL Server táblába.

Végrehajtott és nem tranzakciós XML tömeges terhelési műveletek

Az XML Tömeges Terhelés akár tranzakciós, akár nem végrehajtott módban is működhet. A teljesítmény általában optimális, ha nem tranzakciós módban töltünk tömegesen: azaz a tranzakció tulajdonság HAMIS-ra van állítva) és az alábbi feltételek közül bármelyik érvényes:

  • Azok a táblák, amelyekbe az adatokat tömegesen betöltik, üresek, indexek nélkül.

  • A táblázatokban adat és egyedi indexek találhatók.

A nem tranzakciós megközelítés nem garantálja a visszafordítást, ha valami rosszul sül el a tömeges terhelés során (bár részleges visszafordítások előfordulhatnak). A nem tranzakciós tömeges terhelés akkor megfelelő, ha az adatbázis üres. Ezért, ha valami elromlik, kitakaríthatod az adatbázist, és újraindíthatod az XML tömeges betöltést.

Megjegyzés:

Nem tranzakciós módban az XML Bulk Load egy alapértelmezett belső tranzakciót használ, és azt commit. Amikor a Transaction tulajdonság TRUE-ra van állítva, az XML Bulk Load nem hívja a commit-et ezen a tranzakción.

Ha a tranzakció tulajdonság TRUE-ra van állítva, az XML Bulk Load ideiglenes fájlokat hoz létre, egyet minden táblázathoz, amely a leképezési sémában van azonosítva. Az XML Bulk Load először ezekben az ideiglenes fájlokban tárolja a forrás XML dokumentum rekordjait. Ezután egy Transact-SQL BULK INSERT utasítás visszanyeri ezeket a rekordokat a fájlokból, és a megfelelő táblákban tárolja őket. A TempFilePath tulajdonsággal megadhatja ezeknek az ideiglenes fájloknak a helyét. Biztosítani kell, hogy az XML Bulk Load-val használt SQL Server fiók hozzáférjen ehhez az útvonalhoz. Ha a TempFilePath tulajdonság nincs megadva, akkor a TEMP környezeti változóban megadott alapértelmezett fájlút alapján készítik el az ideiglenes fájlokat.

Ha a tranzakció tulajdonság FALSE (alapértelmezett beállítás) értékre van állítva, az XML Bulk Load az IRowsetFastLoad OLE DB interfészt használja az adatok tömeges betöltésére.

Ha a ConnectionString tulajdonság beállítja a kapcsolási láncsort, és a Transaction tulajdonság TRUE-ra van állítva, az XML Bulk Load saját tranzakciós kontextusában működik. (Például az XML Bulk Load saját tranzakciót indít, és szükség szerint commit vagy vissza fordít.)

Ha a ConnectionCommand tulajdonság beállítja a kapcsolatot egy meglévő kapcsolati objektummal, és a Transaction tulajdonság TRUE-ra van állítva, az XML Bulk Load nem ad ki COMMIT vagy ROLLBACK utasítást siker vagy siker esetén. Ha hiba jelentkezik, az XML Bulk Load a megfelelő hibaüzenetet adja vissza. A COMMIT vagy ROLLBACK utasítás kiadásáról az az ügyfél dönt, amely elindította a tömeges terhelést. Az XML Bulk Load-hoz használt kapcsolatobjektumnak ICommand típusúnak vagy ADO parancsobjektumnak kell lennie.

Az SQLXML 4.0-ban a ConnectionObject nem használható FALSE (FALSE) tranzakció tulajdonság beállításával a ConnectionObject. A nem tranzakciós mód nem támogatott egy ConnectionObject esetén, mert lehetetlen több IRowsetFastLoad interfést nyitni egy pass-in ülésen.