Aracılığıyla paylaş


Bağlam Yorumu - sql:overflow-field

Şunlar için geçerlidir:SQL ServerAzure SQL Veritabanı

Bir şemada, XML belgesinden tüketilmeyen tüm verileri almak için bir sütunu taşma sütunu olarak tanımlanabilir. Bu sütun, sql:overflow-field annotasyonu kullanılarak şemada belirtilir. Birden fazla taşma sütunu olması mümkündür.

Sql:overflow-field açıklaması tanımlanmış bir XML düğümü (öğe veya öznitelik) kapsama girdiğinde, taşma sütunu aktive olur ve tüketilmemiş veri alır. Düğüm kapsam dışı olduğunda, taşım sütunu artık aktif değildir ve XML Toplu Yük, önceki taşma alanını (varsa) aktif kılar.

Verileri taşma sütununda sakladığı gibi, XML Toplu Yük ayrıca sql:overflow-alanının tanımlandığı ana elemanın açılış ve kapanış etiketlerini de saklar.

Örneğin, aşağıdaki şema Customers> ve CustOrder öğelerini< tanımlar.>< Bu elemanların her biri bir taşma sütununu tanımlar:

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

Şemada, <Müşteri> öğesi Cust tablosuna, <Order> öğesi ise CustOrder tablosuna eşlenir.

Hem Müşteri> hem de<<Sipariş öğeleri> bir taşma sütununu tanımlar. Böylece, XML Toplu Yük, tüketilmeyen tüm Müşteri<> öğesi ve özniteliklerini Cust tablosunun taşma sütununda, tüketilmemiş tüm Order> öğesi ve özniteliklerini< ise CustOrder tablosunun taşma sütununda kaydeder.

Çalışan bir örnek test etmek için

  1. Bu örnekte verilen şemayı SampleSchema.xmlolarak kaydedin.

  2. Şu tabloları oluşturun:

    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. Aşağıdaki örnek XML verilerini SampleXMLData.xmlolarak kaydedin:

    <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. XML Toplu Yükleme çalıştırmak için, bu Microsoft Visual Basic Scripting Edition (VBScript) örneğini Sample.vbs olarak kaydedip çalıştırın:

    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