Tolkning av kommentar – sql:overflow-field

gäller för:SQL ServerAzure SQL Database

I ett schema kan du identifiera en kolumn som en överflödeskolumn för att ta emot all oanvänd data från XML-dokumentet. Denna kolumn specificeras i schemat genom att använda sql:overflow-fältannoteringen . Det är möjligt att ha flera överflödeskolumner.

När en XML-nod (element eller attribut) för vilken det finns en sql:overflow-fältannotering kommer in i scope, aktiveras överflödeskolumnen och tar emot oanvänd data. När noden går utanför räckvidd är överflödeskolumnen inte längre aktiv och XML Bulk Load gör det tidigare överflödesfältet (om något) aktivt.

Eftersom XML Bulk Load lagrar data i överflödeskolumnen lagrar den också öppnings- och stängningstaggarna för det föräldraelement för vilket sql:overflow-field är definierat.

Till exempel beskriver följande schema Kunder<>- och <CustOrder-elementen>. Var och en av dessa element identifierar en överflödeskolumn:

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

I schemat mappas Customer-elementet <> till Cust-tabellen och Order-elementet <> till CustOrder-tabellen.

Både <Kund-> och <Orderelementen> identifierar en överflödeskolumn. Således sparar XML Bulk Load alla icke-förbrukade barnelement och attribut för Kund-elementet<> i överflödeskolumnen i Cust-tabellen, samt alla oanvända barnelement och attribut för Order-elementet <> i överflödeskolumnen i CustOrder-tabellen.

För att testa ett fungerande prov

  1. Spara schemat som ges i detta exempel som SampleSchema.xml.

  2. Skapa följande tabeller:

    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. Spara följande exempel-XML-data som 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. För att köra XML Bulk Load, spara och kör detta Microsoft Visual Basic Scripting Edition (VBScript)-exempel som 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