Freigeben über


sql:overflow-field (SQLXML 4.0)

In einem Schema können Sie eine Spalte als Überlaufspalte identifizieren, um alle nicht verarbeiteten Daten aus dem XML-Dokument zu empfangen. Diese Spalte wird im Schema mithilfe der sql:overflow-field Anmerkung angegeben. Es ist möglich, mehrere Überlaufspalten zu haben.

Wenn ein XML-Knoten (Element oder Attribut), für den eine sql:overflow-field Anmerkung definiert ist, in den Bereich eingegeben wird, wird die Überlaufspalte aktiviert und empfängt unkonsumierte Daten. Wenn der Knoten außerhalb des Gültigkeitsbereichs liegt, ist die Überlaufspalte nicht mehr aktiv, und die XML-Massenlast macht das vorherige Überlauffeld (sofern vorhanden) aktiv.

Beim Speichern von Daten in der Überlaufspalte speichert XML Bulk Load auch die öffnenden und schließenden Tags des übergeordneten Elements, für das sql:overflow-field definiert ist.

Das folgende Schema beschreibt beispielsweise die <Elemente Customers> und <CustOrder> . Jedes dieser Elemente identifiziert eine Überlaufspalte:

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

Im Schema ordnet das <Element "Customer> " der Tabelle "Cust" und dem <Element "Order> " der CustOrder-Tabelle zu.

Sowohl die <Elemente "Kunde> " als <auch "Order> " identifizieren eine Überlaufspalte. Daher speichert XML Bulk Load alle nicht fortgesetzten untergeordneten Elemente und Attribute des <Customer-Elements> in der Überlaufspalte der Cust-Tabelle und alle nicht fortgesetzten untergeordneten Elemente und Attribute des <Order-Elements> in der Überlaufspalte der CustOrder-Tabelle.

So testen Sie ein Arbeitsbeispiel

  1. Speichern Sie das schema, das in diesem Beispiel bereitgestellt wird, als SampleSchema.xml.

  2. Erstellen Sie diese 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. Speichern Sie die folgenden XML-Beispieldaten 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. Zum Ausführen des XML-Massenladevorgangs speichern und ausführen Sie dieses Beispiel für Microsoft Visual Basic Scripting Edition (VBScript) 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