Delen via


XML Bulk Load Voorbeelden (SQLXML 4.0)

Van toepassing op:SQL ServerAzure SQL Database

De volgende voorbeelden illustreren de XML Bulk Load-functionaliteit in Microsoft SQL Server. Elk voorbeeld geeft een XSD-schema en het bijbehorende XDR-schema.

Bulk Loader-script (ValidateAndBulkload.vbs)

Het volgende script, geschreven in de Microsoft Visual Basic Scripting Edition (VBScript), laadt een XML-document in de XML DOM; valideert het tegen een schema; en, als het document geldig is, voert het een XML-bulk uit om de XML in een SQL Server-tabel te laden. Dit script kan later in dit onderwerp worden gebruikt met elk van de individuele voorbeelden die ernaar verwijzen.

Opmerking

XML Bulk Load geeft geen waarschuwing of foutmelding als er geen inhoud uit het databestand wordt geüpload. Daarom is het verstandig om je XML-databestand te valideren voordat je een bulkload uitvoert.

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  

Eén. XML in bulk laden in een tabel

Dit voorbeeld legt een verbinding tot stand met de instantie van SQL Server die is gespecificeerd in de ConnectionString-eigenschap (MyServer). Het voorbeeld specificeert ook de eigenschap ErrorLogFile. Daarom wordt de foutuitvoer opgeslagen in het opgegeven bestand ("C:\error.log"), dat je mogelijk ook naar een andere locatie kunt verplaatsen. Let ook op dat de Execute-methode als parameters zowel het mapping schema-bestand (SampleSchema.xml) als het XML-databestand (SampleXMLData.xml). Wanneer de bulk load wordt uitgevoerd, bevat de Cust-tabel die je hebt aangemaakt in de tempdb-database nieuwe records gebaseerd op de inhoud van het XML-databestand.

Om een monster bulklading te testen

  1. Maak deze tabel:

    CREATE TABLE Cust(CustomerID  int PRIMARY KEY,  
                      CompanyName varchar(20),  
                      City        varchar(20));  
    GO  
    
  2. Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleSchema.xml. Voeg aan dit bestand het volgende XSD-schema toe:

    <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. Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleXMLData.xml. Voeg aan dit bestand het volgende XML-document toe:

    <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. Maak een bestand aan in de door je favoriete tekst- of XML-editor en sla het op als ValidateAndBulkload.vbs. Voeg aan dit bestand de VBScript-code toe die hierboven aan het begin van dit onderwerp wordt gegeven. Pas de verbindingsstring aan om de juiste servernaam te geven. Specificeer het juiste pad voor de bestanden die als parameters voor de Execute-methode zijn gespecificeerd.

  5. Voer de VBScript-code uit. XML Bulk Load laadt de XML in de Cust-tabel.

Dit is het equivalente 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. Bulkladen van XML-gegevens in meerdere tabellen

In dit voorbeeld bestaat het XML-document uit de <elementen Klant> en <Bestelling> .

<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>  

Dit voorbeeld laadt de XML-gegevens in bulk in twee tabellen, Cust en CustOrder:

  • Cust(KlantID, Bedrijfsnaam, Stad)

  • CustOrder(OrderID, CustomerID)

Het volgende XSD-schema definieert de XML-weergave van deze tabellen. Het schema specificeert de ouder-kindrelatie tussen de elementen Klant<> en <Order>.

<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 gebruikt de primaire sleutel/vreemde sleutelrelatie zoals hierboven gespecificeerd tussen de <Cust-> en <CustOrder-elementen> om de data in bulk in beide tabellen te laden.

Om een monster bulklading te testen

  1. Maak twee tabellen aan in de tempdb-database :

    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. Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleSchema.xml. Voeg het XSD-schema dat in dit voorbeeld wordt gegeven toe aan het bestand.

  3. Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleData.xml. Voeg het XML-document dat eerder in dit voorbeeld werd verstrekt toe aan het bestand.

  4. Maak een bestand aan in de door je favoriete tekst- of XML-editor en sla het op als ValidateAndBulkload.vbs. Voeg aan dit bestand de VBScript-code toe die hierboven aan het begin van dit onderwerp wordt gegeven. Pas de verbindingsstring aan om de juiste server- en databasenaam te geven. Specificeer het juiste pad voor de bestanden die als parameters voor de Execute-methode zijn gespecificeerd.

  5. Voer de hierboven genoemde VBScript-code uit. XML Bulk Load laadt het XML-document in de tabellen Cust en CustOrder.

Dit is het equivalente 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. Het gebruik van ketenrelaties in het schema om XML bulk te laden

Dit voorbeeld illustreert hoe de M:N-relatie die in het mappingschema is gespecificeerd, door XML Bulk Load wordt gebruikt om data te laden in een tabel die een M:N-relatie vertegenwoordigt.

Denk bijvoorbeeld aan dit 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="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>  

Het schema specificeert een <Order-element> met een <product-kindelement> . Het <Order-element> wordt gekoppeld aan de Ord-tabel en het <Product-element> aan de Product-tabel in de database. De ketenrelatie die op het <productelement> wordt gespecificeerd, identificeert een M:N-relatie die wordt weergegeven door de OrderDetail-tabel. (Een bestelling kan veel producten bevatten, en een product kan in meerdere bestellingen worden opgenomen.)

Wanneer je een XML-document bulkload met dit schema, worden records toegevoegd aan de tabellen Ord, Product en OrderDetail.

Om een werkmonster te testen

  1. Maak drie tabellen:

    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. Bewaar het schema dat hierboven in dit voorbeeld wordt gegeven als SampleSchema.xml.

  3. Sla de volgende voorbeeld-XML-gegevens op als 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. Maak een bestand aan in de door je favoriete tekst- of XML-editor en sla het op als ValidateAndBulkload.vbs. Voeg aan dit bestand de VBScript-code toe die hierboven aan het begin van dit onderwerp wordt gegeven. Pas de verbindingsstring aan om de juiste server- en databasenaam te geven. Verwijder de volgende regels uit de broncode voor dit voorbeeld.

    objBL.CheckConstraints = True  
    objBL.Transaction=True  
    
  5. Voer de VBScript-code uit. XML Bulk Load laadt het XML-document in de Ord- en Product-tabellen.

D. Bulkbelasting in identiteitstypekolommen

Dit voorbeeld illustreert hoe bulk load omgaat met kolommen van identiteitstype. In het voorbeeld wordt de data in bulk geladen in drie tabellen (Ord, Product en OrderDetail).

In deze tabellen:

  • OrderID in de Ord-tabel is een kolom voor identiteitstype

  • ProductID in de producttabel is een kolom voor identiteitstype.

  • OrderID- en ProductID-kolommen in de OrderDetail zijn kolommen voor vreemde sleutels die verwijzen naar de overeenkomstige primaire sleutelkolommen in de Ord- en Product-tabellen.

De volgende zijn de tabelschema's voor dit voorbeeld:

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

In dit voorbeeld van XML Bulk Load is de eigenschap KeepIdentity van het BulkLoad-objectmodel op false gezet. Daarom genereert SQL Server identiteitswaarden voor de kolommen ProductID en OrderID in respectievelijk de Product- en Ord-tabellen (alle waarden die in de documenten worden opgegeven die in bulk geladen moeten worden, worden genegeerd).

In dit geval identificeert XML Bulk Load de relatie tussen primaire sleutel en vreemde sleutel tussen tabellen. Bulk Load voegt eerst records in de tabellen in met de primaire sleutel, en verspreidt vervolgens de identiteitswaarde die door SQL Server wordt gegenereerd naar de tabellen met kolommen van vreemde sleutels. In het volgende voorbeeld voegt XML Bulk Load gegevens in tabellen in deze volgorde:

  1. Product

  2. Ord

  3. OrderDetail

    Opmerking

    Om identiteitswaarden die in de Products- en Orders-tabellen worden gegenereerd te kunnen verspreiden, vereist de verwerkingslogica XML Bulk Load om deze waarden bij te houden voor latere invoeging in de OrderDetails-tabel. Om dat te doen, maakt XML Bulk Load tussenliggende tabellen, vult de data in deze tabellen en verwijdert ze later.

Om een werkmonster te testen

  1. Maak deze tabellen:

    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. Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleSchema.xml. Voeg dit XSD-schema toe aan dit bestand.

    <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. Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleXMLData.xml. Voeg het volgende XML-document toe.

    <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. Maak een bestand aan in de door je favoriete tekst- of XML-editor en sla het op als ValidateAndBulkload.vbs. Voeg aan dit bestand de volgende VBScript-code toe. Pas de verbindingsstring aan om de juiste server- en databasenaam te geven. Specificeer het juiste pad voor de bestanden die als parameters dienen voor de Execute-methode .

    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. Voer de VBScript-code uit. De XML Bulk Load laadt de gegevens in de juiste tabellen.

E. Tabelschema's genereren vóór bulkladen

XML Bulk Load kan optioneel de tabellen genereren als ze niet bestaan vóór bulk loading. Het instellen van de SchemaGen-eigenschap van het SQLXMLBulkLoad-object op TRUE doet dit. Je kunt ook optioneel XML Bulk Load aanvragen om bestaande tabellen te verwijderen en opnieuw aan te maken door de SGDropTables-eigenschap op TRUE te zetten. Het volgende VBScript-voorbeeld illustreert het gebruik van deze eigenschappen.

Ook zet dit voorbeeld twee extra eigenschappen op WAAR:

  • CheckConstraints. Door deze eigenschap op WAAR te zetten, wordt ervoor gezorgd dat de gegevens die in de tabellen worden ingevoegd geen beperkingen schendt die op de tabellen zijn gespecificeerd (in dit geval de PRIMAIRE SLEUTEL/VREEMDE SLEUTEL-beperkingen die zijn gespecificeerd tussen de Cust- en CustOrder-tabellen). Als er sprake is van een schending van de beperking, faalt de bulkbelasting.

  • XMLFragment. Deze eigenschap moet op WAAR worden gezet omdat het voorbeeld-XML-document (databron) geen enkel, top-level element bevat (en dus een fragment is).

Dit is de VBScript-code:

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  

Om een werkmonster te testen

  1. Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleSchema.xml. Voeg het XSD-schema toe dat in het eerdere voorbeeld, "Using chain relationships in the schema to bulk load XML", aan het bestand.

  2. Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleXMLData.xml. Voeg het XML-document toe dat in het eerdere voorbeeld, "Using chain relationships in the schema to bulk load XML", aan het bestand. Verwijder het <ROOT-element> uit het document (om het een fragment te maken).

  3. Maak een bestand aan in de door je favoriete tekst- of XML-editor en sla het op als ValidateAndBulkload.vbs. Voeg aan dit bestand de VBScript-code toe in dit voorbeeld. Pas de verbindingsstring aan om de juiste server- en databasenaam te geven. Specificeer het juiste pad voor de bestanden die als parameters voor de Execute-methode zijn gespecificeerd.

  4. Voer de VBScript-code uit. De XML Bulk Load maakt de benodigde tabellen op basis van het geleverde mappingschema en laadt de data daarin in bulk.

F. Bulkbelasting vanuit een stroom

De Execute-methode van het XML Bulk Load-objectmodel gebruikt twee parameters. De eerste parameter is het mapping schema-bestand. De tweede parameter levert de XML-gegevens die in de database geladen moeten worden. Er zijn twee manieren om de XML-gegevens door te geven aan de Execute-methode van XML Bulk Load:

  • Geef de bestandsnaam als parameter op.

  • Geef een stroom door die de XML-data bevat.

Dit voorbeeld illustreert hoe je bulk kunt laden vanuit een stroom.

VBScript voert eerst een SELECT-instructie uit om klantinformatie op te halen uit de Customers-tabel in de Northwind-database. Omdat de FOR XML-clausule is gespecificeerd (met de ELEMENTS-optie) in de SELECT-instructie, levert de query een element-centrisch XML-document van deze vorm terug:

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

Het script geeft vervolgens de XML als stroom door aan de Execute-methode als tweede parameter. De Execute-methode laadt de data bulk in de Cust-tabel.

Omdat dit script de SchemaGen-eigenschap op TRUE zet en de SGDropTables-eigenschap op TRUE, maakt XML Bulk Load de Cust-tabel aan in de opgegeven database. (Als de tabel al bestaat, wordt de tabel eerst gedropt en vervolgens opnieuw aangemaakt.)

Dit is het VBScript-voorbeeld:

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  

Het volgende XSD-mappingschema biedt de benodigde informatie om de tabel te maken:

<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>  

Dit is het equivalente 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>  

Een stream openen op een bestaand bestand

Je kunt ook een stream openen op een bestaand XML-databestand en de stream als parameter doorgeven aan de Execute-methode (in plaats van de bestandsnaam als parameter).

Dit is een Visual Basic-voorbeeld van het doorgeven van een stroom als de parameter:

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  

Om de applicatie te testen, gebruik je het volgende XML-document in een bestand (SampleData.xml) en het XSD-schema dat in dit voorbeeld wordt geleverd:

Dit is de XML-brongegevens (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>  

Dit is het equivalente 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. Bulkbelasting in overloopkolommen

Als het mappingschema een overflow-kolom specificeert met behulp van de sql:overflow-field-annotatie , kopieert XML Bulk Load alle niet-gebruikte data uit het brondocument naar deze kolom.

Beschouw dit 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>  

Het schema identificeert een overflowkolom (OverflowColumn) voor de Cust-tabel. Als gevolg hiervan worden alle niet-gebruikte XML-gegevens voor elk <Klant-element> aan deze kolom toegevoegd.

Opmerking

Alle abstracte elementen (elementen waarvoor abstract="waar" is gespecificeerd) en alle verboden attributen (attributen waarvoor verboden="waar" is gespecificeerd) worden door XML Bulk Load als overflow beschouwd en worden toegevoegd aan de kolom overflow, indien gespecificeerd. (Anders worden ze genegeerd.)

Om een werkmonster te testen

  1. Maak twee tabellen aan in de tempdb-database :

    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. Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleSchema.xml. Voeg het XSD-schema dat in dit voorbeeld wordt gegeven toe aan het bestand.

  3. Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleXMLData.xml. Voeg het volgende XML-document toe aan het bestand:

    <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. Maak een bestand aan in de door je favoriete tekst- of XML-editor en sla het op als ValidateAndBulkload.vbs. Voeg aan dit bestand de volgende Microsoft Visual Basic Scripting Edition (VBScript) code toe. Pas de verbindingsstring aan om de juiste server- en databasenaam te geven. Specificeer het juiste pad voor de bestanden die als parameters voor de Execute-methode zijn gespecificeerd.

    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. Voer de VBScript-code uit.

Dit is het equivalente 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. Het specificeren van het bestandspad voor tijdelijke bestanden in transactiemodus

Wanneer je bulk laadt in transactiemodus (dat wil zeggen, wanneer de Transaction-eigenschap op TRUE is gezet), moet je ook de TempFilePath-eigenschap instellen wanneer een van de volgende voorwaarden waar is:

  • Je laadt bulk naar een externe server.

  • Je wilt een alternatieve lokale schijf of map gebruiken (een andere dan het pad dat door de TEMP-omgevingsvariabele is gespecificeerd) om de tijdelijke bestanden op te slaan die in de transactiemodus worden aangemaakt.

Bijvoorbeeld, de volgende VBScript-code laadt bulk data uit het SampleXMLData.xml-bestand in de databasetabellen in transactiemodus. De eigenschap TempFilePath wordt gespecificeerd om het pad in te stellen voor de tijdelijke bestanden die in transactiemodus worden gegenereerd.

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  

Opmerking

Het tijdelijke bestandspad moet een gedeelde locatie zijn die toegankelijk is voor het serviceaccount van de doelinstantie van SQL Server en voor het account dat de bulk load-applicatie draait. Tenzij je bulk load op een lokale server gebruikt, moet het tijdelijke bestandspad een UNC-pad zijn (zoals \\servername\sharename).

Om een werkmonster te testen

  1. Maak deze tabel aan in de tempdb-database :

    USE tempdb;  
    CREATE TABLE Cust (     CustomerID uniqueidentifier,   
          LastName  varchar(20));  
    GO  
    
  2. Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleSchema.xml. Voeg het volgende XSD-schema toe aan het bestand:

    <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. Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleXMLData.xml. Voeg het volgende XML-document toe aan het bestand:

    <ROOT>  
    <Customers CustomerID="6F9619FF-8B86-D011-B42D-00C04FC964FF"   
               LastName="Smith" />  
    </ROOT>  
    
  4. Maak een bestand aan in de door je favoriete tekst- of XML-editor en sla het op als ValidateAndBulkload.vbs. Voeg aan dit bestand de volgende VBScript-code toe. Pas de verbindingsstring aan om de juiste server- en databasenaam te geven. Specificeer het juiste pad voor de bestanden die als parameters voor de Execute-methode zijn gespecificeerd. Specificeer ook het juiste pad voor de eigenschap 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. Voer de VBScript-code uit.

    Het schema moet het bijbehorende sql:datatype specificeren voor het CustomerID-attribuut wanneer de waarde voor CustomerID wordt opgegeven als een GUID die haakjes ({ en } bevat, zoals:

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

    Dit is het bijgewerkte schema:

    <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>  
    

    Wanneer sql:datatype wordt gespecificeerd en het kolomtype als uniqueidentifier identificeert, verwijdert de bulkload-operatie de hakjes ({ en }) uit de CustomerID-waarde voordat deze in de kolom wordt ingevoegd.

Dit is het equivalente 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. Een bestaande databaseverbinding gebruiken met de eigenschap ConnectionCommand

Je kunt een bestaande ADO-verbinding gebruiken om XML bulk te laden. Dit is nuttig als XML Bulk Load slechts één van de vele bewerkingen is die op een databron worden uitgevoerd.

De ConnectionCommand-eigenschap stelt je in staat een bestaande ADO-verbinding te gebruiken door een ADO-commando-object te gebruiken. Dit wordt geïllustreerd in het volgende Visual Basic-voorbeeld:

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  

Om een werkmonster te testen

  1. Maak twee tabellen aan in de tempdb-database :

    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. Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleSchema.xml. Voeg het volgende XSD-schema toe aan het bestand:

    <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. Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleXMLData.xml. Voeg het volgende XML-document toe aan het bestand:

    <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. Maak een Visual Basic (Standard EXE) applicatie en de voorgaande code. Voeg deze verwijzingen toe aan het project:

    Microsoft XML BulkLoad for SQL Server 4.0 Type Library  
    Microsoft ActiveX Data objects 2.6 Library  
    
  5. Voer de toepassing uit.

Dit is het equivalente 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. Bulkladen in xml Data Type kolommen

Als het mappingschema een xml-datatypekolom specificeert door gebruik te maken van de sql:datatype="xml" annotatie, kan XML Bulk Load XML-kindelementen voor het gemapte veld van het brondocument naar deze kolom kopiëren.

Overweeg het volgende XSD-schema, dat een weergave van de Production.ProductModel-tabel in de AdventureWorks-voorbeelddatabase in kaart brengt. In deze tabel wordt het CatalogDescription-veld van xml-datatype gekoppeld aan een <Desc-element> met behulp van de sql:field en sql:datatype="xml" annotaties.

<?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>  

Om een werkmonster te testen

  1. Controleer of de AdventureWorks-voorbeelddatabase is geïnstalleerd.

  2. Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleSchema.xml. Kopieer het bovenstaande XSD-schema, plak het in het bestand en sla het op.

  3. Maak een bestand aan in je favoriete tekst- of XML-editor en sla het op als SampleXMLData.xml. Kopieer het volgende XML-document hieronder, plak het in het bestand en sla het op in dezelfde map als voor de vorige stap.

    <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. Maak een bestand aan in je voorkeurstekst- of XML-editor en sla het op als BulkloadXml.vbs. Kopieer de volgende VBScript-code en plak deze in het bestand. Sla het op in dezelfde map als gebruikt voor de vorige XML-data en schemabestanden.

    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. Voer het BulkloadXml.vbs-script uit.