共用方式為


sql:overflow-field (SQLXML 4.0)

在結構描述中,您可以將資料行識別為溢位資料行,以便從 XML 文件中接收所有未耗用的資料。請藉由使用 sql:overflow-field 註解,在結構描述中指定這個資料行。具有多個溢位資料行是可行的。

當有定義 sql:overflow-field 註解的 XML 節點 (元素或屬性) 進入範圍時,此溢位資料行就會啟動,並接收未耗用的資料。當此節點離開範圍時,此溢位資料行就不再處於使用中狀態,而且 XML 大量載入會讓之前的溢位欄位 (如果有的話) 變成使用中。

當它將資料儲存在溢位資料行時,XML 大量載入也會儲存有定義 sql:overflow-field 之父元素的開頭標記與結束標記。

例如,下列結構描述會描述 <Customers><CustOrder> 元素。每一個元素都可識別溢位資料行:

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

在結構描述中,<Customer> 元素會對應到 Cust 資料表,而 <Order> 元素會對應到 CustOrder 資料表。

<Customer><Order> 元素都會識別溢位資料行。因此,XML 大量載入會將 <Customer> 元素的所有未耗用的子元素和屬性儲存在 Cust 資料表的溢位資料行中,並將 <Order> 元素的所有未耗用的子元素和屬性儲存在 CustOrder 資料表的溢位資料行中。

測試工作範例

  1. 將這個範例所提供的結構描述儲存為 SampleSchema.xml。

  2. 建立這些資料表:

    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. 將下列 XML 資料範例儲存為 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. 若要執行 XML 大量載入,請將這個 Microsoft Visual Basic Scripting Edition (VBScript) 範例儲存為 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