Bagikan melalui


Interpretasi Anotasi - sql:overflow-field

Berlaku untuk: SQL ServerAzure SQL Database

Dalam skema, Anda dapat mengidentifikasi kolom sebagai kolom luapan untuk menerima semua data yang tidak dikonsumsi dari dokumen XML. Kolom ini ditentukan dalam skema dengan menggunakan anotasi sql:overflow-field . Dimungkinkan untuk memiliki beberapa kolom luapan.

Setiap kali simpul XML (elemen atau atribut) yang ada anotasi bidang sql:overflow yang ditentukan dimasukkan ke dalam cakupan, kolom luapan diaktifkan dan menerima data yang tidak dikonsumsi. Ketika simpul keluar dari cakupan, kolom luapan tidak lagi aktif dan Beban Massal XML membuat bidang luapan sebelumnya (jika ada) aktif.

Saat menyimpan data di kolom luapan, Beban Massal XML juga menyimpan tag pembuka dan penutupan elemen induk yang didefinisikan sql:overflow-field .

Misalnya, skema berikut menjelaskan elemen Pelanggan> dan <CustOrder>.< Masing-masing elemen ini mengidentifikasi kolom luapan:

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

Dalam skema, <elemen Pelanggan> memetakan ke tabel Cust dan <elemen Order> memetakan ke tabel CustOrder.

<Elemen Pelanggan> dan <Pesanan> mengidentifikasi kolom luapan. Dengan demikian, Beban Massal XML menyimpan semua elemen turunan yang tidak dikonsumsi dan atribut elemen Pelanggan> di kolom luapan tabel Kust, dan semua elemen turunan yang tidak dikonsumsi dan atribut elemen Pesanan< >di kolom luapan tabel CustOrder.<

Untuk menguji sampel yang berfungsi

  1. Simpan skema yang disediakan dalam contoh ini sebagai SampleSchema.xml.

  2. Buat tabel ini:

    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. Simpan contoh data XML berikut sebagai 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. Untuk menjalankan Pemuatan Massal XML, simpan dan jalankan contoh Microsoft Visual Basic Scripting Edition (VBScript) ini sebagai 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