XML-massladdningsexempel (SQLXML 4.0)

gäller för:SQL ServerAzure SQL Database

Följande exempel illustrerar XML Bulk Load-funktionaliteten i Microsoft SQL Server. Varje exempel ger ett XSD-schema och dess motsvarande XDR-schema.

Bulk Loader-skript (ValidateAndBulkload.vbs)

Följande skript, skrivet i Microsoft Visual Basic Scripting Edition (VBScript), laddar ett XML-dokument i XML DOM; validerar det mot ett schema; och, om dokumentet är giltigt, utför en XML-bulkladdning för att ladda XML:en i en SQL Server-tabell. Detta skript kan användas med varje individuellt exempel som hänvisar till det senare i ämnet.

Anmärkning

XML Bulk Load ger ingen varning eller fel om inget innehåll laddas upp från datafilen. Därför är det en god praxis att validera din XML-datafil innan du utför en bulk-inläsning.

Dim FileValid  
  
set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")  
objBL.ConnectionString = "provider=SQLOLEDB;data source=MyServer;database=tempdb;integrated security=SSPI"  
objBL.ErrorLogFile = "c:\error.log"  
  
'Validate the data file prior to bulkload  
Dim sOutput   
sOutput = ValidateFile("SampleXMLData.xml", "", "SampleSchema.xml")  
WScript.Echo sOutput  
  
If FileValid Then  
   ' Check constraints and initiate transaction (if needed)  
   ' objBL.CheckConstraints = True  
   ' objBL.Transaction=True  
  'Execute XML bulkload using file.  
  objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"  
  set objBL=Nothing  
End If  
  
Function ValidateFile(strXmlFile,strUrn,strXsdFile)  
  
   ' Create a schema cache and add SampleSchema.xml to it.  
   Dim xs, fso, sAppPath  
   Set fso = CreateObject("Scripting.FileSystemObject")   
   Set xs = CreateObject("MSXML2.XMLSchemaCache.6.0")  
   sAppPath = fso.GetFolder(".")   
   xs.Add strUrn, sAppPath & "\" & strXsdFile  
  
   ' Create an XML DOMDocument object.  
   Dim xd   
   Set xd = CreateObject("MSXML2.DOMDocument.6.0")  
  
   ' Assign the schema cache to the DOM document.  
   ' schemas collection.  
   Set xd.schemas = xs  
  
   ' Load XML document as DOM document.  
   xd.async = False  
   xd.Load sAppPath & "\" & strXmlFile  
  
   ' Return validation results in message to the user.  
   If xd.parseError.errorCode <> 0 Then  
        ValidateFile = "Validation failed on " & _  
             strXmlFile & vbCrLf & _  
             "=======" & vbCrLf & _  
             "Reason: " & xd.parseError.reason & _  
             vbCrLf & "Source: " & _  
             xd.parseError.srcText & _  
             vbCrLf & "Line: " & _  
             xd.parseError.Line & vbCrLf  
             FileValid = False  
    Else  
        ValidateFile = "Validation succeeded for " & _  
             strXmlFile & vbCrLf & _  
             "========" & _  
             vbCrLf & "Contents to be bulkloaded" & vbCrLf  
             FileValid = True  
    End If  
End Function  

A. Massladdning av XML i en tabell

Detta exempel etablerar en anslutning till instansen av SQL Server som specificeras i egenskapen ConnectionString (MyServer). Exemplet specificerar också egenskapen ErrorLogFile. Därför sparas felutmatningen i den angivna filen ("C:\error.log"), som du också kan välja att ändra till en annan plats. Observera också att metoden Execute har som parametrar både mappningsschemafilen (SampleSchema.xml) och XML-datafilen (SampleXMLData.xml). När bulk-laddningen körs kommer den Cust-tabell du har skapat i tempdb-databasen att innehålla nya poster baserade på innehållet i XML-datafilen.

För att testa en provlast

  1. Skapa den här tabellen:

    CREATE TABLE Cust(CustomerID  int PRIMARY KEY,  
                      CompanyName varchar(20),  
                      City        varchar(20));  
    GO  
    
  2. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som SampleSchema.xml. Lägg till följande XSD-schema i denna fil:

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
                xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
       <xsd:element name="ROOT" sql:is-constant="1" >  
         <xsd:complexType>  
           <xsd:sequence>  
             <xsd:element name="Customers" sql:relation="Cust" maxOccurs="unbounded">  
               <xsd:complexType>  
                 <xsd:sequence>  
                   <xsd:element name="CustomerID"  type="xsd:integer" />  
                   <xsd:element name="CompanyName" type="xsd:string" />  
                   <xsd:element name="City"        type="xsd:string" />  
                 </xsd:sequence>  
               </xsd:complexType>  
             </xsd:element>  
           </xsd:sequence>  
          </xsd:complexType>  
         </xsd:element>  
    </xsd:schema>  
    
  3. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som SampleXMLData.xml. Lägg till följande XML-dokument i denna fil:

    <ROOT>  
      <Customers>  
        <CustomerID>1111</CustomerID>  
        <CompanyName>Sean Chai</CompanyName>  
        <City>New York</City>  
      </Customers>  
      <Customers>  
        <CustomerID>1112</CustomerID>  
        <CompanyName>Tom Johnston</CompanyName>  
         <City>Los Angeles</City>  
      </Customers>  
      <Customers>  
        <CustomerID>1113</CustomerID>  
        <CompanyName>Institute of Art</CompanyName>  
        <City>Chicago</City>  
      </Customers>  
    </ROOT>  
    
  4. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som ValidateAndBulkload.vbs. Lägg till VBScript-koden som finns ovan i början av detta ämne i denna fil. Modifiera anslutningssträngen för att ange rätt servernamn. Ange lämplig sökväg för de filer som anges som parametrar för Execut-metoden.

  5. Kör VBScript-koden. XML Bulk Load laddar XML:en i Cust-tabellen.

Det här är motsvarande XDR-schema:

  
<Schema xmlns="urn:schemas-microsoft-com:xml-data"   
        xmlns:dt="urn:schemas-microsoft-com:xml:datatypes"    
        xmlns:sql="urn:schemas-microsoft-com:xml-sql" >   
  
   <ElementType name="CustomerID" dt:type="int" />  
   <ElementType name="CompanyName" dt:type="string" />  
   <ElementType name="City" dt:type="string" />  
  
   <ElementType name="ROOT" sql:is-constant="1">  
      <element type="Customers" />  
   </ElementType>  
  
   <ElementType name="Customers"  sql:relation="Cust" >  
      <element type="CustomerID"  sql:field="CustomerID" />  
      <element type="CompanyName" sql:field="CompanyName" />  
      <element type="City"        sql:field="City" />  
  
   </ElementType>  
</Schema>  

B. Massladdning av XML-data i flera tabeller

I detta exempel består XML-dokumentet av <Kund-> och <Order-elementen> .

<ROOT>  
  <Customers>  
    <CustomerID>1111</CustomerID>  
    <CompanyName>Sean Chai</CompanyName>  
    <City>NY</City>  
    <Order OrderID="1" />  
    <Order OrderID="2" />  
  </Customers>  
  <Customers>  
    <CustomerID>1112</CustomerID>  
    <CompanyName>Tom Johnston</CompanyName>  
     <City>LA</City>    
    <Order OrderID="3" />  
  </Customers>  
  <Customers>  
    <CustomerID>1113</CustomerID>  
    <CompanyName>Institute of Art</CompanyName>  
    <Order OrderID="4" />  
  </Customers>  
</ROOT>  

Detta exempel laddar XML-data i två tabeller, Cust och CustOrder:

  • Cust(KundID, Företagsnamn, Stad)

  • CustOrder(OrderID, CustomerID)

Följande XSD-schema definierar XML-vyn av dessa tabeller. Schemat specificerar föräldra-barn-relationen mellan <Kund-> och <Order-elementen> .

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  <xsd:annotation>  
    <xsd:appinfo>  
      <sql:relationship name="CustCustOrder"  
          parent="Cust"  
          parent-key="CustomerID"  
          child="CustOrder"  
          child-key="CustomerID" />  
    </xsd:appinfo>  
  </xsd:annotation>  
  <xsd:element name="ROOT" sql:is-constant="1" >  
    <xsd:complexType>  
      <xsd:sequence>  
        <xsd:element name="Customers" sql:relation="Cust" >  
          <xsd:complexType>  
            <xsd:sequence>  
              <xsd:element name="CustomerID"  type="xsd:integer" />  
              <xsd:element name="CompanyName" type="xsd:string" />  
              <xsd:element name="City"        type="xsd:string" />  
              <xsd:element name="Order"   
                          sql:relation="CustOrder"  
                          sql:relationship="CustCustOrder" >  
                <xsd:complexType>  
                  <xsd:attribute name="OrderID" type="xsd:integer" />  
                </xsd:complexType>  
              </xsd:element>  
             </xsd:sequence>  
          </xsd:complexType>  
        </xsd:element>  
      </xsd:sequence>  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

XML Bulk Load använder primärnyckel/främmande nyckel-relationen som anges ovan mellan <Cust-> och <CustOrder-elementen> för att massladda data i båda tabellerna.

För att testa en provlast

  1. Skapa två tabeller i tempdb-databasen :

    USE tempdb;  
    CREATE TABLE Cust(  
           CustomerID  int PRIMARY KEY,  
           CompanyName varchar(20),  
           City        varchar(20));  
    CREATE TABLE CustOrder(        OrderID     int PRIMARY KEY,   
            CustomerID int FOREIGN KEY REFERENCES Cust(CustomerID));  
    
  2. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som SampleSchema.xml. Lägg till XSD-schemat som ges i detta exempel till filen.

  3. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som SampleData.xml. Lägg till XML-dokumentet som gavs tidigare i detta exempel till filen.

  4. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som ValidateAndBulkload.vbs. Lägg till VBScript-koden som finns ovan i början av detta ämne i denna fil. Modifiera anslutningssträngen för att ange rätt server- och databasnamn. Ange lämplig sökväg för de filer som anges som parametrar för Execut-metoden.

  5. Exekvera VBScript-koden ovan. XML Bulk Load laddar XML-dokumentet i Cust- och CustOrder-tabellerna.

Det här är motsvarande XDR-schema:

  
<Schema xmlns="urn:schemas-microsoft-com:xml-data"   
        xmlns:dt="urn:schemas-microsoft-com:xml:datatypes"    
        xmlns:sql="urn:schemas-microsoft-com:xml-sql" >   
   <ElementType name="CustomerID" dt:type="int" />  
   <ElementType name="CompanyName" dt:type="string" />  
   <ElementType name="City" dt:type="string" />  
  
   <ElementType name="ROOT" sql:is-constant="1">  
      <element type="Customers" />  
   </ElementType>  
  
   <ElementType name="Customers" sql:relation="Cust" >  
      <element type="CustomerID" sql:field="CustomerID" />  
      <element type="CompanyName" sql:field="CompanyName" />  
      <element type="City" sql:field="City" />  
      <element type="Order" >  
<sql:relationship  
                key-relation="Cust"  
                key="CustomerID"  
                foreign-key="CustomerID"  
                foreign-relation="CustOrder" />  
      </element>  
   </ElementType>  
    <ElementType name="Order" sql:relation="CustOrder" >  
      <AttributeType name="OrderID" />  
      <AttributeType name="CustomerID" />  
      <attribute type="OrderID" />  
      <attribute type="CustomerID" />  
    </ElementType>  
</Schema>  

C. Att använda kedjerelationer i schemat för att massladda XML

Detta exempel illustrerar hur M:N-relationen som specificeras i mappningsschemat används av XML Bulk Load för att ladda data i en tabell som representerar en M:N-relation.

Tänk till exempel på det här XSD-schemat:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
<xsd:annotation>  
  <xsd:appinfo>  
    <sql:relationship name="OrderOD"  
          parent="Ord"  
          parent-key="OrderID"  
          child="OrderDetail"  
          child-key="OrderID" />  
  
    <sql:relationship name="ODProduct"  
          parent="OrderDetail"  
          parent-key="ProductID"  
          child="Product"  
          child-key="ProductID"   
          inverse="true"/>  
  </xsd:appinfo>  
</xsd:annotation>  
  
  <xsd:element name="ROOT" sql:is-constant="1" >  
    <xsd:complexType>  
      <xsd:sequence>  
        <xsd:element name="Order"   
                     sql:relation="Ord"   
                     sql:key-fields="OrderID" >  
          <xsd:complexType>  
            <xsd:sequence>  
             <xsd:element name="Product"  
                          sql:relation="Product"   
                          sql:key-fields="ProductID"  
                          sql:relationship="OrderOD ODProduct">  
               <xsd:complexType>  
                 <xsd:attribute name="ProductID" type="xsd:int" />  
                 <xsd:attribute name="ProductName" type="xsd:string" />  
               </xsd:complexType>  
             </xsd:element>  
           </xsd:sequence>  
           <xsd:attribute name="OrderID"   type="xsd:integer" />   
           <xsd:attribute name="CustomerID"   type="xsd:string" />  
         </xsd:complexType>  
       </xsd:element>  
      </xsd:sequence>  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

Schemat specificerar ett <Order-element> med ett <produkt-barnelement> . Order-elementet mappas till Ord-tabellen och Produkt-elementet <> mappas till Produkt-tabellen i databasen.<> Kedjerelationen som anges på produktelementet<> identifierar en M:N-relation som representeras av OrderDetail-tabellen. (En beställning kan innehålla många produkter, och en produkt kan ingå i många beställningar.)

När du massladdar ett XML-dokument med detta schema läggs poster till i tabellerna Ord, Product och OrderDetail.

För att testa ett fungerande prov

  1. Skapa tre tabeller:

    CREATE TABLE Ord (  
             OrderID     int  PRIMARY KEY,  
             CustomerID  varchar(5));  
    GO  
    CREATE TABLE Product (  
             ProductID   int PRIMARY KEY,  
             ProductName varchar(20));  
    GO  
    CREATE TABLE OrderDetail (  
           OrderID     int FOREIGN KEY REFERENCES Ord(OrderID),  
           ProductID   int FOREIGN KEY REFERENCES Product(ProductID),  
                       CONSTRAINT OD_key PRIMARY KEY (OrderID, ProductID));  
    GO  
    
  2. Spara schemat som anges ovan i detta exempel som SampleSchema.xml.

  3. Spara följande exempel-XML-data som SampleXMLData.xml:

    <ROOT>    
      <Order OrderID="1" CustomerID="ALFKI">  
        <Product ProductID="1" ProductName="Chai" />  
        <Product ProductID="2" ProductName="Chang" />  
      </Order>  
      <Order OrderID="2" CustomerID="ANATR">  
        <Product ProductID="3" ProductName="Aniseed Syrup" />  
        <Product ProductID="4" ProductName="Gumbo Mix" />  
      </Order>  
    </ROOT>  
    
  4. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som ValidateAndBulkload.vbs. Lägg till VBScript-koden som finns ovan i början av detta ämne i denna fil. Modifiera anslutningssträngen för att ange rätt server- och databasnamn. Avlämna kommentarerna till följande rader från källkoden för detta exempel.

    objBL.CheckConstraints = True  
    objBL.Transaction=True  
    
  5. Kör VBScript-koden. XML Bulk Load laddar XML-dokumentet i Ord- och Produkttabellerna.

D. Bulkladdning i identitetstypkolumner

Detta exempel illustrerar hur bulk load hanterar identitetstypkolumner. I exemplet laddas data i bulk i tre tabeller (Ord, Product och OrderDetail).

I dessa tabeller:

  • OrderID i Ord-tabellen är en kolumn för identitetstyp

  • ProductID i Produkttabellen är en kolumn för identitetstyp.

  • OrderID- och ProductID-kolumnerna i OrderDetail är främmande nyckelkolumner som avser motsvarande primärnyckelkolumner i Ord- och Produkttabellerna.

Följande är tabellscheman för detta exempel:

Ord (OrderID, CustomerID)  
Product (ProductID, ProductName)  
OrderDetail (OrderID, ProductID)  

I detta exempel med XML Bulk Load är egenskapen KeepIdentity för BulkLoad-objektmodellen satt till false. Därför genererar SQL Server identitetsvärden för kolumnerna ProductID och OrderID i Product- respektive Ord-tabellerna (alla värden som anges i dokumenten som ska laddas in i bulk ignoreras).

I detta fall identifierar XML Bulk Load primärnyckel/främmande nyckel-relationen mellan tabeller. Bulk Load infogar först poster i tabellerna med primärnyckeln, och vidarebefordrar sedan identitetsvärdet som genereras av SQL Server till tabellerna med kolumner med främmande nyckel. I följande exempel infogar XML Bulk Load data i tabeller i denna ordning:

  1. Produkt

  2. Ord

  3. OrderDetail

    Anmärkning

    För att sprida identitetsvärden som genereras i tabellerna Produkter och Order kräver bearbetningslogiken XML Bulk Load för att hålla reda på dessa värden för senare insättning i tabellen OrderDetails. För att göra detta skapar XML Bulk Load mellanliggande tabeller, fyller i datan i dessa tabeller och tar dem senare bort.

För att testa ett fungerande prov

  1. Skapa följande tabeller:

    CREATE TABLE Ord (  
             OrderID     int identity(1,1)  PRIMARY KEY,  
             CustomerID  varchar(5));  
    GO  
    CREATE TABLE Product (  
             ProductID   int identity(1,1) PRIMARY KEY,  
             ProductName varchar(20));  
    GO  
    CREATE TABLE OrderDetail (  
           OrderID     int FOREIGN KEY REFERENCES Ord(OrderID),  
           ProductID   int FOREIGN KEY REFERENCES Product(ProductID),  
                       CONSTRAINT OD_key PRIMARY KEY (OrderID, ProductID));  
    GO  
    
  2. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som SampleSchema.xml. Lägg till detta XSD-schema i denna fil.

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
                xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
     <xsd:annotation>  
       <xsd:appinfo>  
        <sql:relationship name="OrderOD"  
              parent="Ord"  
              parent-key="OrderID"  
              child="OrderDetail"  
              child-key="OrderID" />  
        <sql:relationship name="ODProduct"  
              parent="OrderDetail"  
              parent-key="ProductID"  
              child="Product"  
              child-key="ProductID"   
              inverse="true"/>  
       </xsd:appinfo>  
     </xsd:annotation>  
    
      <xsd:element name="Order" sql:relation="Ord"   
                                sql:key-fields="OrderID" >  
       <xsd:complexType>  
         <xsd:sequence>  
            <xsd:element name="Product" sql:relation="Product"   
                         sql:key-fields="ProductID"  
                         sql:relationship="OrderOD ODProduct">  
              <xsd:complexType>  
                 <xsd:attribute name="ProductID" type="xsd:int" />  
                 <xsd:attribute name="ProductName" type="xsd:string" />  
              </xsd:complexType>  
            </xsd:element>  
         </xsd:sequence>  
            <xsd:attribute name="OrderID"   type="xsd:integer" />   
            <xsd:attribute name="CustomerID"   type="xsd:string" />  
        </xsd:complexType>  
      </xsd:element>  
    </xsd:schema>  
    
  3. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som SampleXMLData.xml. Lägg till följande XML-dokument.

    <ROOT>    
      <Order OrderID="11" CustomerID="ALFKI">  
        <Product ProductID="11" ProductName="Chai" />  
        <Product ProductID="22" ProductName="Chang" />  
      </Order>  
      <Order OrderID="22" CustomerID="ANATR">  
         <Product ProductID="33" ProductName="Aniseed Syrup" />  
        <Product ProductID="44" ProductName="Gumbo Mix" />  
      </Order>  
    </ROOT>  
    
  4. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som ValidateAndBulkload.vbs. Lägg till följande VBScript-kod i denna fil. Modifiera anslutningssträngen för att ange rätt server- och databasnamn. Ange lämplig sökväg för filerna som fungerar som parametrar till Execut-metoden .

    Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")  
    objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"  
    objBL.ErrorLogFile = "C:\error.log"  
    objBL.CheckConstraints = True  
    objBL.Transaction = False  
    objBL.KeepIdentity = False  
    objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"  
    Set objBL = Nothing  
    MsgBox "Done."  
    
  5. Kör VBScript-koden. XML Bulk Load kommer att ladda in data i lämpliga tabeller.

E. Generering av tabellscheman före bulkladdning

XML Bulk Load kan valfritt generera tabellerna om de inte finns innan bulkinläsning. Att sätta egenskapen SchemaGen för SQLXMLBulkLoad-objektet till TRUE gör detta. Du kan också valfritt begära XML Bulk Load för att ta bort befintliga tabeller och återskapa dem genom att sätta SGDropTables-egenskapen till TRUE. Följande VBScript-exempel illustrerar användningen av dessa egenskaper.

Dessutom sätter detta exempel två ytterligare egenskaper till SANT:

  • CheckConstraints. Att sätta denna egenskap till SANT säkerställer att datan som infogas i tabellerna inte bryter mot några begränsningar som specificerats i tabellerna (i detta fall PRIMÄRNYCKEL/FRÄMMANDE NYCKEL-begränsningar som anges mellan Cust- och CustOrder-tabellerna). Om det sker ett begränsningsbrott misslyckas bulklasten.

  • XMLFragment. Denna egenskap måste sättas till SANT eftersom det exempel-XML-dokumentet (datakällan) inte innehåller något enskilt, toppnivåelement (och därmed är ett fragment).

Detta är VBScript-koden:

Dim objBL   
Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")  
objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"  
objBL.ErrorLogFile = "c:\error.log"  
  
objBL.CheckConstraints=true  
objBL.XMLFragment = True  
objBL.SchemaGen = True  
objBL.SGDropTables = True  
  
objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"  
Set objBL = Nothing  

För att testa ett fungerande prov

  1. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som SampleSchema.xml. Lägg till XSD-schemat som finns i det tidigare exemplet, "Using chain relationships in the schema to bulk load XML", till filen.

  2. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som SampleXMLData.xml. Lägg till XML-dokumentet som ges i det tidigare exemplet, "Using chain relationships in the schema to bulk load XML", till filen. Ta bort ROOT-elementet <> från dokumentet (för att göra det till ett fragment).

  3. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som ValidateAndBulkload.vbs. Lägg till VBScript-koden i detta exempel i denna fil. Modifiera anslutningssträngen för att ange rätt server- och databasnamn. Ange lämplig sökväg för de filer som anges som parametrar för Execut-metoden.

  4. Kör VBScript-koden. XML Bulk Load skapar de nödvändiga tabellerna baserat på det mappningsschema som tillhandahålls och laddar in datan i det i stor skala.

F. Bulklastning från en ström

Exekver-metoden i XML Bulk Load-objektmodellen använder två parametrar. Den första parametern är mappningsschemafilen. Den andra parametern tillhandahåller den XML-data som ska laddas in i databasen. Det finns två sätt att skicka XML-data till Execute-metoden för XML Bulk Load:

  • Ange filnamnet som parameter.

  • Skicka en ström som innehåller XML-data.

Detta exempel illustrerar hur man bulklastar från en ström.

VBScript exekverar först en SELECT-sats för att hämta kundinformation från tabellen Customers i Northwind-databasen. Eftersom FOR XML-klausulen är specificerad (med ELEMENTS-alternativet) i SELECT-satsen, returnerar frågan ett elementcentrerat XML-dokument av denna form:

<Customer>  
  <CustomerID>..</CustomerID>  
  <CompanyName>..</CompanyName>  
  <City>..</City>  
</Customer>  
...  

Skriptet skickar sedan XML:en som en ström till Execut-metoden som sin andra parameter. Execute-metoden laddar in data i Cust tabell.

Eftersom detta skript sätter SchemaGen-egenskapen till TRUE och SGDropTables-egenskapen till TRUE, skapar XML Bulk Load Cust-tabellen i den angivna databasen. (Om tabellen redan finns, släpper den först tabellen och skapar den sedan igen.)

Detta är exemplet med VBScript:

Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")  
Set objCmd = CreateObject("ADODB.Command")  
Set objConn = CreateObject("ADODB.Connection")  
Set objStrmOut = CreateObject ("ADODB.Stream")  
  
objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"  
objBL.ErrorLogFile     = "c:\error.log"  
objBL.CheckConstraints = True  
objBL.SchemaGen        = True  
objBL.SGDropTables     = True  
objBL.XMLFragment      = True  
' Open a connection to the instance of SQL Server to get the source data.  
  
objConn.Open "provider=SQLOLEDB;server=(local);database=tempdb;integrated security=SSPI"  
Set objCmd.ActiveConnection = objConn  
objCmd.CommandText = "SELECT CustomerID, CompanyName, City FROM Customers FOR XML AUTO, ELEMENTS"  
  
' Open the return stream and execute the command.  
Const adCRLF = -1  
Const adExecuteStream = 1024  
objStrmOut.Open  
objStrmOut.LineSeparator = adCRLF  
objCmd.Properties("Output Stream").Value = objStrmOut  
objCmd.Execute , , adExecuteStream  
objStrmOut.Position = 0  
  
' Execute bulk load. Read source XML data from the stream.  
objBL.Execute "SampleSchema.xml", objStrmOut  
  
Set objBL = Nothing  

Följande XSD-mappningsschema ger nödvändig information för att skapa tabellen:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
<xsd:element name="ROOT" sql:is-constant="true" >  
  <xsd:complexType>  
    <xsd:sequence>  
      <xsd:element ref="Customers"/>  
    </xsd:sequence>  
  </xsd:complexType>  
</xsd:element>  
<xsd:element name="Customers" sql:relation="Cust" >  
  <xsd:complexType>  
    <xsd:sequence>  
      <xsd:element name="CustomerID"  
                   type="xsd:string"  
                   sql:datatype="nvarchar(5)"/>  
      <xsd:element name="CompanyName"  
                   type="xsd:string"  
                   sql:datatype="nvarchar(40)"/>  
      <xsd:element name="City"  
                   type="xsd:string"  
                   sql:datatype="nvarchar(40)"/>  
    </xsd:sequence>  
  </xsd:complexType>  
</xsd:element>  
</xsd:schema>  

Detta är ett ekvivalent XDR-schema:

<?xml version="1.0" ?>  
<Schema xmlns="urn:schemas-microsoft-com:xml-data"   
        xmlns:dt="urn:schemas-microsoft-com:xml:datatypes"    
        xmlns:sql="urn:schemas-microsoft-com:xml-sql" >  
   <ElementType name="CustomerID" dt:type="int" />  
   <ElementType name="CompanyName" dt:type="string" />  
   <ElementType name="City" dt:type="string" />  
  
   <ElementType name="root" sql:is-constant="1">  
      <element type="Customers" />  
   </ElementType>  
  
   <ElementType name="Customers" sql:relation="Cust"  >  
      <element type="CustomerID" sql:field="CustomerID" />  
      <element type="CompanyName" sql:field="CompanyName" />  
      <element type="City" sql:field="City" />  
    </ElementType>  
</Schema>  

Att öppna en ström på en befintlig fil

Du kan också öppna en ström på en befintlig XML-datafil och skicka strömmen som en parameter till metoden Execute (istället för att skicka filnamnet som parameter).

Detta är ett Visual Basic-exempel på att skicka en ström som parametern:

Private Sub Form_Load()  
Dim objBL As New SQLXMLBulkLoad  
Dim objStrm As New ADODB.Stream  
Dim objFileSystem As New Scripting.FileSystemObject  
Dim objFile As Scripting.TextStream  
  
MsgBox "Begin BulkLoad..."  
objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"  
objBL.ErrorLogFile = "c:\error.log"  
objBL.CheckConstraints = True  
objBL.SchemaGen = True  
objBL.SGDropTables = True  
' Here again a stream is specified that contains the source data   
' (instead of the file name). But this is just an illustration.  
' Usually this is useful if you have an XML data   
' stream that is created by some other means that you want to bulk   
' load. This example starts with an XML text file, so it may not be the   
' best to use a stream (you can specify the file name directly).  
' Here you could have specified the file name itself.   
Set objFile = objFileSystem.OpenTextFile("c:\SampleData.xml")  
objStrm.Open  
objStrm.WriteText objFile.ReadAll  
objStrm.Position = 0  
objBL.Execute "c:\SampleSchema.xml", objStrm  
  
Set objBL = Nothing  
MsgBox "Done."  
End Sub  

För att testa applikationen, använd följande XML-dokument i en fil (SampleData.xml) och det XSD-schema som tillhandahålls i detta exempel:

Detta är XML-källdata (SampleData.xml):

<ROOT>  
  <Customers>  
    <CustomerID>1111</CustomerID>  
    <CompanyName>Hanari Carnes</CompanyName>  
    <City>NY</City>  
    <Order OrderID="1" />  
    <Order OrderID="2" />  
  </Customers>  
  
  <Customers>  
    <CustomerID>1112</CustomerID>  
    <CompanyName>Toms Spezialitten</CompanyName>  
     <City>LA</City>  
    <Order OrderID="3" />  
  </Customers>  
  <Customers>  
    <CustomerID>1113</CustomerID>  
    <CompanyName>Victuailles en stock</CompanyName>  
    <Order CustomerID= "4444" OrderID="4" />  
</Customers>  
</ROOT>  

Det här är motsvarande XDR-schema:

<?xml version="1.0" ?>  
<Schema xmlns="urn:schemas-microsoft-com:xml-data"   
        xmlns:dt="urn:schemas-microsoft-com:xml:datatypes"    
        xmlns:sql="urn:schemas-microsoft-com:xml-sql" >  
  
    <ElementType name="Order" sql:relation="CustOrder" >  
      <AttributeType name="OrderID" />  
      <AttributeType name="CustomerID" />  
      <attribute type="OrderID" />  
      <attribute type="CustomerID" />  
    </ElementType>  
  
   <ElementType name="CustomerID" dt:type="int" />  
   <ElementType name="CompanyName" dt:type="string" />  
   <ElementType name="City" dt:type="string" />  
  
   <ElementType name="root" sql:is-constant="1">  
      <element type="Customers" />  
   </ElementType>  
  
   <ElementType name="Customers" sql:relation="Cust"  >  
      <element type="CustomerID" sql:field="CustomerID" />  
      <element type="CompanyName" sql:field="CompanyName" />  
      <element type="City" sql:field="City" />  
      <element type="Order" >  
             <sql:relationship  
                key-relation="Cust"  
                key="CustomerID"  
                foreign-key="CustomerID"  
                foreign-relation="CustOrder" />  
      </element>  
   </ElementType>  
</Schema>  

G. Bulkbelastning i överflödeskolonner

Om mappningsschemat specificerar en överflödeskolumn med hjälp av sql:overflow-field-annotationen , kopierar XML Bulk Load all oanvänd data från källdokumentet till denna kolumn.

Betrakta detta XSD-schema:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
<xsd:annotation>  
  <xsd:appinfo>  
    <sql:relationship name="CustCustOrder"  
          parent="Cust"  
          parent-key="CustomerID"  
          child="CustOrder"  
          child-key="CustomerID" />  
  </xsd:appinfo>  
</xsd:annotation>  
  <xsd:element name="Customers" sql:relation="Cust"  
                                sql:overflow-field="OverflowColumn" >  
   <xsd:complexType>  
     <xsd:sequence>  
       <xsd:element name="CustomerID"  type="xsd:integer" />  
       <xsd:element name="CompanyName" type="xsd:string" />  
       <xsd:element name="City"        type="xsd:string" />  
       <xsd:element name="Order"   
                          sql:relation="CustOrder"  
                          sql:relationship="CustCustOrder" >  
         <xsd:complexType>  
          <xsd:attribute name="OrderID" type="xsd:integer" />  
          <xsd:attribute name="CustomerID" type="xsd:integer" />  
         </xsd:complexType>  
       </xsd:element>  
     </xsd:sequence>  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

Schemat identifierar en överflödeskolumn (OverflowColumn) för Cust-tabellen. Som ett resultat läggs all oanvänd XML-data för varje <kundelement> till denna kolumn.

Anmärkning

Alla abstrakta element (element där abstrakt="sann" är specificerat) och alla förbjudna attribut (attribut för vilka förbjudet="sann" är specificerat) betraktas som överflöd enligt XML Bulk Load och läggs till i överflödeskolumnen, om angivn. (Annars ignoreras de.)

För att testa ett fungerande prov

  1. Skapa två tabeller i tempdb-databasen :

    USE tempdb;  
    CREATE TABLE Cust (  
                  CustomerID     int         PRIMARY KEY,  
                  CompanyName    varchar(20) NOT NULL,  
                  City           varchar(20) DEFAULT 'Seattle',  
                  OverflowColumn nvarchar(200));  
    GO  
    CREATE TABLE CustOrder (  
                  OrderID    int PRIMARY KEY,  
                  CustomerID int FOREIGN KEY   
                                 REFERENCES Cust(CustomerID));  
    GO  
    
  2. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som SampleSchema.xml. Lägg till XSD-schemat som ges i detta exempel till filen.

  3. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som SampleXMLData.xml. Lägg till följande XML-dokument i filen:

    <ROOT>  
      <Customers>  
        <CustomerID>1111</CustomerID>  
        <CompanyName>Hanari Carnes</CompanyName>  
        <City><![CDATA[NY]]> </City>  
        <Junk>garbage in overflow</Junk>  
        <Order OrderID="1" />  
        <Order OrderID="2" />  
      </Customers>  
    
      <Customers>  
        <CustomerID>1112</CustomerID>  
        <CompanyName>Toms Spezialitten</CompanyName>  
         <![CDATA[LA]]>   
        <!-- <xyz><address>111 Maple, Seattle</address></xyz>   -->  
        <Order OrderID="3" />  
      </Customers>  
      <Customers>  
        <CustomerID>1113</CustomerID>  
        <CompanyName>Victuailles en stock</CompanyName>  
        <Order OrderID="4" />  
    </Customers>  
    </ROOT>  
    
  4. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som ValidateAndBulkload.vbs. Lägg till följande Microsoft Visual Basic Scripting Edition (VBScript)-kod till denna fil. Modifiera anslutningssträngen för att ange rätt server- och databasnamn. Ange lämplig sökväg för de filer som anges som parametrar för Execut-metoden.

    set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")  
    objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"  
    objBL.ErrorLogFile = "c:\error.log"  
    objBL.CheckConstraints = True  
    objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"  
    set objBL=Nothing  
    
  5. Kör VBScript-koden.

Det här är motsvarande XDR-schema:

<?xml version="1.0" ?>  
<Schema xmlns="urn:schemas-microsoft-com:xml-data"   
        xmlns:dt="urn:schemas-microsoft-com:xml:datatypes"    
        xmlns:sql="urn:schemas-microsoft-com:xml-sql" >  
  
    <ElementType name="Order" sql:relation="CustOrder" >  
      <AttributeType name="OrderID" />  
      <AttributeType name="CustomerID" />  
      <attribute type="OrderID" />  
      <attribute type="CustomerID" />  
    </ElementType>  
  
   <ElementType name="CustomerID" dt:type="int" />  
   <ElementType name="CompanyName" dt:type="string" />  
   <ElementType name="City" dt:type="string" />  
  
   <ElementType name="root" sql:is-constant="1">  
      <element type="Customers" />  
   </ElementType>  
  
   <ElementType name="Customers" sql:relation="Cust"   
                       sql:overflow-field="OverflowColumn"  >  
      <element type="CustomerID" sql:field="CustomerID" />  
      <element type="CompanyName" sql:field="CompanyName" />  
      <element type="City" sql:field="City" />  
      <element type="Order" >  
             <sql:relationship  
                key-relation="Cust"  
                key="CustomerID"  
                foreign-key="CustomerID"  
                foreign-relation="CustOrder" />  
      </element>  
   </ElementType>  
</Schema>  

H. Specificering av filvägen för tillfälliga filer i transaktionsläge

När du bulkladdar i transaktionsläge (det vill säga när Transaktionsegenskapen är satt till TRUE) måste du också sätta egenskapen TempFilePath när något av följande villkor är sant:

  • Du massladdar till en fjärrserver.

  • Du vill använda en alternativ lokal enhet eller mapp (en annan än den sökväg som anges av TEMP-miljövariabeln) för att lagra de temporära filer som skapas i transaktionsläget.

Till exempel laddar följande VBScript-kod in data från SampleXMLData.xml filen i databastabellerna i transaktionsläge. Egenskapen TempFilePath specificeras för att sätta sökvägen för de temporära filer som genereras i transaktionsläge.

set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")  
objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"  
objBL.ErrorLogFile = "c:\error.log"  
objBL.CheckConstraints = True  
objBL.Transaction=True  
objBL.TempFilePath="\\Server\MyDir"  
objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"  
set objBL=Nothing  

Anmärkning

Den tillfälliga filvägen måste vara en delad plats som är tillgänglig för tjänstekontot för målinstansen av SQL Server och för kontot som kör bulk-load-applikationen. Om du inte massladdar på en lokal server måste den tillfälliga filvägen vara en UNC-väg (som \\servername\sharename).

För att testa ett fungerande prov

  1. Skapa denna tabell i tempdb-databasen :

    USE tempdb;  
    CREATE TABLE Cust (     CustomerID uniqueidentifier,   
          LastName  varchar(20));  
    GO  
    
  2. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som SampleSchema.xml. Lägg till följande XSD-schema i filen:

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
                xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
      <xsd:element name="ROOT" sql:is-constant="true" >  
        <xsd:complexType>  
          <xsd:sequence>  
            <xsd:element ref="Customers" />  
          </xsd:sequence>  
        </xsd:complexType>  
      </xsd:element>  
    
      <xsd:element name="Customers" sql:relation="Cust" >  
       <xsd:complexType>  
         <xsd:attribute name="CustomerID"  type="xsd:string" />  
         <xsd:attribute name="LastName" type="xsd:string" />  
       </xsd:complexType>  
      </xsd:element>  
    </xsd:schema>  
    
  3. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som SampleXMLData.xml. Lägg till följande XML-dokument i filen:

    <ROOT>  
    <Customers CustomerID="6F9619FF-8B86-D011-B42D-00C04FC964FF"   
               LastName="Smith" />  
    </ROOT>  
    
  4. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som ValidateAndBulkload.vbs. Lägg till följande VBScript-kod i denna fil. Modifiera anslutningssträngen för att ange rätt server- och databasnamn. Ange lämplig sökväg för de filer som anges som parametrar för Execut-metoden. Ange också lämplig sökväg för egenskapen TempFilePath.

    set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")  
    objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"  
    objBL.ErrorLogFile = "c:\error.log"  
    objBL.CheckConstraints = True  
    objBL.Transaction=True  
    objBL.TempFilePath="\\server\folder"  
    objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"  
    set objBL=Nothing  
    
  5. Kör VBScript-koden.

    Schemat måste specificera motsvarande sql:datatype för attributet CustomerID när värdet för CustomerID anges som en GUID som inkluderar klammer ({ och }), såsom:

    <ROOT>  
    <Customers CustomerID="{6F9619FF-8B86-D011-B42D-00C04FC964FF}"   
               LastName="Smith" />  
    </ROOT>  
    

    Detta är det uppdaterade schemat:

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
                xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
      <xsd:element name="ROOT" sql:is-constant="true" >  
        <xsd:complexType>  
          <xsd:sequence>  
            <xsd:element ref="Customers" />  
          </xsd:sequence>  
        </xsd:complexType>  
      </xsd:element>  
    
      <xsd:element name="Customers" sql:relation="Cust" >  
       <xsd:complexType>  
         <xsd:attribute name="CustomerID"  type="xsd:string"   
                        sql:datatype="uniqueidentifier" />  
         <xsd:attribute name="LastName" type="xsd:string" />  
       </xsd:complexType>  
      </xsd:element>  
    </xsd:schema>  
    

    När sql:datatype anges och identifierar kolumntypen som unik identifierare, tar bulk-load-operationen bort klammerna ({ och }) från CustomerID-värdet innan det infogas i kolumnen.

Det här är motsvarande XDR-schema:

<?xml version="1.0" ?>  
<Schema xmlns="urn:schemas-microsoft-com:xml-data"   
        xmlns:dt="urn:schemas-microsoft-com:datatypes"    
        xmlns:sql="urn:schemas-microsoft-com:xml-sql" >  
<ElementType name="ROOT" sql:is-constant="1">  
      <element type="Customers" />  
</ElementType>  
<ElementType name="Customers" sql:relation="Cust" >  
  <AttributeType name="CustomerID"  sql:datatype="uniqueidentifier" />  
  <AttributeType name="LastName"   />  
  
  <attribute type="CustomerID" />  
  <attribute type="LastName"   />  
</ElementType>  
</Schema>  

I. Att använda en befintlig databasanslutning med egenskapen ConnectionCommand

Du kan använda en befintlig ADO-anslutning för att massladda XML. Detta är användbart om XML Bulk Load bara är en av många operationer som kommer att utföras på en datakälla.

Egenskapen ConnectionCommand gör det möjligt att använda en befintlig ADO-anslutning genom att använda ett ADO-kommandoobjekt. Detta illustreras i följande Visual Basic-exempel:

Private Sub Form_Load()  
Dim objBL As New SQLXMLBulkLoad4  
Dim objCmd As New ADODB.Command  
Dim objConn As New ADODB.Connection  
  
'Open a connection to an instance of SQL Server.  
objConn.Open "provider=SQLOLEDB;data source=(local);database=tempdb;integrated security=SSPI"  
'Ask the Command object to use the connection just established.  
Set objCmd.ActiveConnection = objConn  
  
'Tell Bulk Load to use the active command object that is using the Connection obj.  
objBL.ConnectionCommand = objCmd  
objBL.ErrorLogFile = "c:\error.log"  
objBL.CheckConstraints = True  
'The Transaction property must be set to True if you use ConnectionCommand.  
objBL.Transaction = True  
objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"  
Set objBL = Nothing  
End Sub  

För att testa ett fungerande prov

  1. Skapa två tabeller i tempdb-databasen :

    USE tempdb;  
    CREATE TABLE Cust(  
                   CustomerID   varchar(5) PRIMARY KEY,  
                   CompanyName  varchar(30),  
                   City         varchar(20));  
    GO  
    CREATE TABLE CustOrder(  
                   CustomerID  varchar(5) references Cust (CustomerID),  
                   OrderID     varchar(5) PRIMARY KEY);  
    GO  
    
  2. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som SampleSchema.xml. Lägg till följande XSD-schema i filen:

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
                xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
    <xsd:annotation>  
      <xsd:appinfo>  
        <sql:relationship name="CustCustOrder"  
              parent="Cust"  
              parent-key="CustomerID"  
              child="CustOrder"  
              child-key="CustomerID" />  
      </xsd:appinfo>  
    </xsd:annotation>  
      <xsd:element name="ROOT" sql:is-constant="true" >  
        <xsd:complexType>  
          <xsd:sequence>  
            <xsd:element ref="Customers" />  
          </xsd:sequence>  
        </xsd:complexType>  
      </xsd:element>  
      <xsd:element name="Customers" sql:relation="Cust" >  
       <xsd:complexType>  
         <xsd:sequence>  
           <xsd:element name="CustomerID"  type="xsd:integer" />  
           <xsd:element name="CompanyName" type="xsd:string" />  
           <xsd:element name="City"        type="xsd:string" />  
           <xsd:element name="Order"   
                              sql:relation="CustOrder"  
                              sql:relationship="CustCustOrder" >  
             <xsd:complexType>  
              <xsd:attribute name="OrderID" type="xsd:integer" />  
              <xsd:attribute name="CustomerID" type="xsd:integer" />  
             </xsd:complexType>  
           </xsd:element>  
         </xsd:sequence>  
        </xsd:complexType>  
      </xsd:element>  
    </xsd:schema>  
    
  3. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som SampleXMLData.xml. Lägg till följande XML-dokument i filen:

    <ROOT>  
      <Customers>  
        <CustomerID>1111</CustomerID>  
        <CompanyName>Hanari Carnes</CompanyName>  
        <City>NY</City>  
        <Order OrderID="1" />  
        <Order OrderID="2" />  
      </Customers>  
    
      <Customers>  
        <CustomerID>1112</CustomerID>  
        <CompanyName>Toms Spezialitten</CompanyName>  
         <City>LA</City>  
        <Order OrderID="3" />  
      </Customers>  
      <Customers>  
        <CustomerID>1113</CustomerID>  
        <CompanyName>Victuailles en stock</CompanyName>  
        <Order OrderID="4" />  
    </Customers>  
    </ROOT>  
    
  4. Skapa en Visual Basic (Standard EXE) applikation och föregående kod. Lägg till dessa referenser i projektet:

    Microsoft XML BulkLoad for SQL Server 4.0 Type Library  
    Microsoft ActiveX Data objects 2.6 Library  
    
  5. Kör programmet.

Det här är motsvarande XDR-schema:

<?xml version="1.0" ?>  
<Schema xmlns="urn:schemas-microsoft-com:xml-data"   
        xmlns:dt="urn:schemas-microsoft-com:xml:datatypes"    
        xmlns:sql="urn:schemas-microsoft-com:xml-sql" >  
  
   <ElementType name="CustomerID" dt:type="int" />  
   <ElementType name="CompanyName" dt:type="string" />  
   <ElementType name="City" dt:type="string" />  
  
   <ElementType name="root" sql:is-constant="1">  
      <element type="Customers" />  
   </ElementType>  
  
   <ElementType name="Customers" sql:relation="Cust"  >  
      <element type="CustomerID" sql:field="CustomerID" />  
      <element type="CompanyName" sql:field="CompanyName" />  
      <element type="City" sql:field="City" />  
      <element type="Order" >  
         <sql:relationship  
                key-relation="Cust"  
                key="CustomerID"  
                foreign-key="CustomerID"  
                foreign-relation="CustOrder" />  
      </element>  
   </ElementType>  
    <ElementType name="Order" sql:relation="CustOrder" >  
      <AttributeType name="OrderID" />  
      <AttributeType name="CustomerID" />  
      <attribute type="OrderID" />  
      <attribute type="CustomerID" />  
    </ElementType>  
</Schema>  

J. Bulkladdning i xml-datatypkolumner

Om mappningsschemat specificerar en xml-datatypkolumn genom att använda sql:datatype="xml"- annoteringen kan XML Bulk Load kopiera XML-barnelement för det mappade fältet från källdokumentet till denna kolumn.

Betrakta följande XSD-schema, som kartlägger en vy av tabellen Production.ProductModel i AdventureWorks exempeldatabas. I denna tabell mappas fältet CatalogDescription för xml-datatypen till ett <Desc-element> med hjälp av sql:field och sql:datatype="xml"- annotationerna.

<?xml version="1.0" encoding="utf-8" ?>  
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
           xmlns:sql="urn:schemas-microsoft-com:mapping-schema"  
           xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">   
  <xsd:element name="ProductModel"  sql:relation="Production.ProductModel" >  
    <xsd:complexType>  
      <xsd:sequence>  
        <xsd:element name="Name" type="xs:string"></xsd:element>  
        <xsd:element name="Desc" sql:field="CatalogDescription" sql:datatype="xml">  
        <xsd:complexType>  
          <xsd:sequence>  
            <xsd:element name="ProductDescription">  
              <xsd:complexType>  
                <xsd:sequence>  
                  <xsd:element name="Summary" type="xs:anyType"/>  
                </xsd:sequence>  
              </xsd:complexType>  
            </xsd:element>  
          </xsd:sequence>  
        </xsd:complexType>  
        </xsd:element>   
     </xsd:sequence>  
     <xsd:attribute name="ProductModelID" sql:field="ProductModelID" />  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

För att testa ett fungerande prov

  1. Verifiera att AdventureWorks-exempeldatabasen är installerad.

  2. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som SampleSchema.xml. Kopiera XSD-schemat ovan och klistra in det i filen och spara det.

  3. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som SampleXMLData.xml. Kopiera följande XML-dokument nedan och klistra in det i filen och spara det i samma mapp som användes för föregående steg.

    <ProductModel ProductModelID="2005">  
        <Name>Mountain-100 (2005 model)</Name>  
        <Desc><?xml-stylesheet href="ProductDescription.xsl" type="text/xsl"?>  
            <p1:ProductDescription xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"   
                  xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"   
                  xmlns:wf="https://www.adventure-works.com/schemas/OtherFeatures"   
                  xmlns:html="http://www.w3.org/1999/xhtml"   
                  xmlns="">  
                <p1:Summary>  
                    <html:p>Our top-of-the-line competition mountain bike.   
          Performance-enhancing options include the innovative HL Frame,   
          super-smooth front suspension, and traction for all terrain.  
                            </html:p>  
                </p1:Summary>  
                <p1:Manufacturer>  
                    <p1:Name>AdventureWorks</p1:Name>  
                    <p1:Copyright>2002-2005</p1:Copyright>  
                    <p1:ProductURL>HTTP://www.Adventure-works.com</p1:ProductURL>  
                </p1:Manufacturer>  
                <p1:Features>These are the product highlights.   
                     <wm:Warranty>  
                        <wm:WarrantyPeriod>3 years</wm:WarrantyPeriod>  
                        <wm:Description>parts and labor</wm:Description>  
                    </wm:Warranty><wm:Maintenance>  
                        <wm:NoOfYears>10 years</wm:NoOfYears>  
                        <wm:Description>maintenance contract available through your dealer or any AdventureWorks retail store.</wm:Description>  
                    </wm:Maintenance><wf:wheel>High performance wheels.</wf:wheel><wf:saddle>  
                        <html:i>Anatomic design</html:i> and made from durable leather for a full-day of riding in comfort.</wf:saddle><wf:pedal>  
                        <html:b>Top-of-the-line</html:b> clipless pedals with adjustable tension.</wf:pedal><wf:BikeFrame>Each frame is hand-crafted in our Bothell facility to the optimum diameter   
          and wall-thickness required of a premium mountain frame.   
          The heat-treated welded aluminum frame has a larger diameter tube that absorbs the bumps.</wf:BikeFrame><wf:crankset> Triple crankset; aluminum crank arm; flawless shifting. </wf:crankset></p1:Features>  
                <!-- add one or more of these elements... one for each specific product in this product model -->  
                <p1:Picture>  
                    <p1:Angle>front</p1:Angle>  
                    <p1:Size>small</p1:Size>  
                    <p1:ProductPhotoID>118</p1:ProductPhotoID>  
                </p1:Picture>  
                <!-- add any tags in <specifications> -->  
                <p1:Specifications> These are the product specifications.  
                       <Material>Aluminum Alloy</Material><Color>Available in most colors</Color><ProductLine>Mountain bike</ProductLine><Style>Unisex</Style><RiderExperience>Advanced to Professional riders</RiderExperience></p1:Specifications>  
            </p1:ProductDescription>  
        </Desc>  
    </ProductModel>  
    
  4. Skapa en fil i din föredragna text- eller XML-redigerare och spara den som BulkloadXml.vbs. Kopiera följande VBScript-kod och klistra in den i filen. Spara den i samma mapp som användes för tidigare XML-data och schemafiler.

    set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")  
    objBL.ConnectionString = "provider=SQLOLEDB;data source=MyServer;database=AdventureWorks;integrated security=SSPI"  
    
    Dim fso, sAppPath  
    Set fso = CreateObject("Scripting.FileSystemObject")   
    sAppPath = fso.GetFolder(".")   
    
    objBL.ErrorLogFile = sAppPath & "\error.log"  
    
    'Execute XML bulkload using file.  
    objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"  
    set objBL=Nothing  
    
  5. Kör skriptet BulkloadXml.vbs.