Delen via


Aantekeningsinterpretatie - sql:overflow-veld

Van toepassing op:SQL ServerAzure SQL Database

In een schema kun je een kolom identificeren als een overflowkolom om alle niet-verbruikte data uit het XML-document te ontvangen. Deze kolom wordt in het schema gespecificeerd door gebruik te maken van de sql:overflow-field annotation. Het is mogelijk om meerdere overloopkolommen te hebben.

Telkens wanneer een XML-knooppunt (element of attribuut) waarvoor een sql:overflow-veldannotatie is gedefinieerd in scope komt, wordt de overflowkolom geactiveerd en ontvangt ongebruikte data. Wanneer de node buiten scope valt, is de overflowkolom niet langer actief en maakt XML Bulk Load het vorige overflowveld (indien aanwezig) actief.

Omdat XML Bulk Load gegevens opslaat in de overflowkolom, slaat het ook de openings- en sluittags op van het ouderelement waarvoor sql:overflow-field is gedefinieerd.

Het volgende schema beschrijft bijvoorbeeld de <Customers-> en <CustOrder-elementen> . Elk van deze elementen identificeert een overloopkolom:

<?xml version="1.0" ?>  
<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"  
                   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"  
                          sql:overflow-field="OverflowColumn">  
               <xsd:complexType>  
                 <xsd:attribute name="OrderID"/>  
                 <xsd:attribute name="CustomerID"/>  
               </xsd:complexType>  
             </xsd:element>  
          </xsd:sequence>   
        </xsd:complexType>  
      </xsd:element>  
    </xsd:sequence>  
  </xsd:complexType>  
 </xsd:element>  
</xsd:schema>  

In het schema wordt het <Customer-element> naar de Cust-tabel gemapt en het <Order-element> naar de CustOrder-tabel.

Zowel de Klant-> als<<de Order-elementen> identificeren een overloopkolom. Zo slaat XML Bulk Load alle niet-gebruikte kindelementen en attributen van het <Customer-element> op in de overflowkolom van de Cust-tabel, en alle niet-gebruikte kindelementen en attributen van het <Order-element> in de overflowkolom van de CustOrder-tabel.

Om een werkmonster te testen

  1. Sla het schema dat in dit voorbeeld wordt gegeven op als SampleSchema.xml.

  2. Maak deze tabellen:

    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),  
              OverflowColumn nvarchar(200))  
    GO  
    
  3. Sla de volgende voorbeeld-XML-gegevens op als SampleXMLData.xml:

    <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>  
       <City><![CDATA[LA]]> </City>  
       <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. Om XML Bulk Load uit te voeren, sla en voer dit voorbeeld van Microsoft Visual Basic Scripting Edition (VBScript) uit als Sample.vbs:

    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 "c:\SampleSchema.xml", "c:\SampleXMLData.xml"  
    set objBL=Nothing