Introduktion till XML Bulk Load (SQLXML 4.0)

gäller för:SQL ServerAzure SQL Database

XML Bulk Load är ett fristående COM-objekt som låter dig ladda semistrukturerad XML-data i Microsoft SQL Server-tabeller.

Du kan infoga XML-data i en SQL Server-databas genom att använda en INSERT-sats och funktionen OPENXML; dock ger verktyget Bulk Load bättre prestanda när du behöver infoga stora mängder XML-data.

Exekveringsmetoden i XML Bulk Load-objektmodellen använder två parametrar:

  • En annoterad XML Schema Definition (XSD) eller XML-Data Reduced (XDR) schema. XML Bulk Load-verktyget tolkar detta mappningsschema och de annotationer som anges i schemat för att identifiera SQL Server-tabellerna där XML-data ska infogas.

  • Ett XML-dokument eller dokumentfragment (ett dokumentfragment är ett dokument utan ett enda toppnivåelement). Ett filnamn eller en ström som XML Bulk Load kan läsas från kan specificeras.

XML Bulk Load tolkar mappningsschemat och identifierar tabellen/tabellerna där XML-data ska infogas.

Det antas att du är bekant med följande SQL Server-funktioner:

Strömning av XML-data

Eftersom källdokumentet i XML kan vara stort läses inte hela dokumentet in i minnet för masshantering. Istället tolkar XML Bulk Load XML-data som en ström och läser den. När verktyget läser datan identifierar det databastabellen/tabellerna, genererar lämpliga poster från XML-datakällan och skickar sedan posten/posterna till SQL Server för insättning.

Till exempel består följande käll-XML-dokument av <kundelement> och <orderbarn> :

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

När XML Bulk Load läser <Kund-elementet> genereras en post för Customertable. När den läser /Customer> endtagg,< infogar XML Bulk Load den posten i tabellen i SQL Server. På samma sätt, när den läser <Order-elementet>, genererar XML Bulk Load en post för Ordertable och infogar sedan den posten i SQL Server-tabellen efter att ha läst /Order> end-taggen<.

Transakterade och icke-transakterade XML-bulklastoperationer

XML Bulk Load kan köras i antingen transakt eller icke-transakt läge. Prestandan är vanligtvis optimal om du bulklastar i ett icke-transaktat läge: det vill säga, Transaktionsegenskapen är satt till FALSK) och något av följande villkor är sant:

  • Tabellerna där datan laddas in i bulk är tomma och saknar index.

  • Tabellerna har data och unika index.

Den icke-transaktionerade metoden garanterar inte en rollback om något går fel i bulk-loadprocessen (även om partiella rollbacks kan ske). Den icke-transakterade bulklasten är lämplig när databasen är tom. Därför, om något går fel, kan du rensa databasen och starta XML Bulk Load igen.

Anmärkning

I icke-transakt läge använder XML Bulk Load en standard intern transaktion och commar den. När Transaktionsegenskapen är satt till TRUE anropar XML Bulk Load inte commit på denna transaktion.

Om Transaktionsegenskapen är satt till TRUE skapar XML Bulk Load tillfälliga filer, en för varje tabell som identifieras i mappningsschemat. XML Bulk Load lagrar först posterna från källdokumentet i XML i dessa temporära filer. Därefter hämtar ett BULK INSERT-uttalande Transact-SQL dessa poster från filerna och lagrar dem i motsvarande tabeller. Du kan ange platsen för dessa temporära filer genom att använda egenskapen TempFilePath. Du måste säkerställa att SQL Server-kontot som används med XML Bulk Load har tillgång till denna sökväg. Om egenskapen TempFilePath inte är specificerad används standardsökvägen som anges i TEMP-miljövariabeln för att skapa de temporära filerna.

Om egenskapen Transaktion är inställd på FALSE (standardinställningen) använder XML Bulk Load OLE DB-gränssnittet IRowsetFastLoad för att massladda datan.

Om egenskapen ConnectionString sätter anslutningssträngen och egenskapen Transaktion är satt till TRUE, opererar XML Bulk Load i sin egen transaktionskontext. (Till exempel startar XML Bulk Load sin egen transaktion och commitar eller rullar tillbaka efter behov.)

Om egenskapen ConnectionCommand sätter anslutningen med ett befintligt anslutningsobjekt och egenskapen Transaktion är satt till TRUE, utfärdar XML Bulk Load inte ett COMMIT- eller ROLLBACK-uttalande vid framgång respektive misslyckande. Om det finns ett fel returnerar XML Bulk Load rätt felmeddelande. Beslutet att utfärda en COMMIT- eller ROLLBACK-sats lämnas till klienten som initierade bulk-lasten. Anslutningsobjektet som används för XML Bulk Load bör vara av typen ICommand eller vara ett ADO-kommandoobjekt.

I SQLXML 4.0 kan en ConnectionObject inte användas med Transaktionsegenskapen satt på FALSE. Det icke-transakterade läget stöds inte med en ConnectionObject eftersom det är omöjligt att öppna mer än ett IRowsetFastLoad-gränssnitt under en pass-in-session.