共用方式為


sql:mapped (SQLXML 4.0)

XML 大量載入會如預期處理 XSD 結構描述中的 sql:mapped 註解,也就是說,如果對應的結構描述針對任何元素或屬性指定 sql:mapped="false" ,XML 大量載入不會嘗試在對應的資料行中儲存相關聯的資料。

XML 大量載入會忽略未對應的元素和屬性 (因為沒有在結構描述中描述它們,或者因為它們在 XSD 結構描述中使用 sql:mapped="false" 進行註解)。如果使用 sql:overflow-field 指定此種資料行,所有未對應的資料都會移入溢位資料行。

例如,請考慮下列 XSD 結構描述:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<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:attribute name="CustomerID"  type="xsd:integer" />
       <xsd:attribute name="CompanyName" type="xsd:string" />
       <xsd:attribute name="City"        type="xsd:string" />
       <xsd:attribute name="HomePhone"   type="xsd:string" 
                                       sql:mapped="false" />
    </xsd:complexType>
  </xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

由於 HomePhone 屬性指定 sql:mapped="false",因此,XML 大量載入不會將此屬性對應到對應的資料行。XSD 結構描述會識別 XML 大量載入儲存此未耗用資料所在的溢位資料行 (OverflowColumn)。

測試工作範例

  1. tempdb 資料庫中建立下列資料表:

    USE tempdb
    CREATE TABLE Cust
              (CustomerID     int         PRIMARY KEY,
               CompanyName    varchar(20) NOT NULL,
               City           varchar(20) DEFAULT 'Seattle',
               OverflowColumn nvarchar(200))
    GO
    
  2. 儲存這個範例所提供的結構描述為 SampleSchema.xml。

  3. 儲存下列範例 XML 資料為 SampleXMLData.xml:

    <ROOT>
      <Customers CustomerID="1111" CompanyName="Sean Chai" 
                 City="NY" HomePhone="111-1111" />
      <Customers CustomerID="1112" CompanyName="Dont Know" 
                 City="LA" HomePhone="222-2222" />
    </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
    

這是相等的 XDR 結構描述:

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data" 
        xmlns:sql="urn:schemas-microsoft-com:xml-sql" > 
   <ElementType name="ROOT" sql:is-constant="1">
      <element type="Customers" />
   </ElementType>
   <ElementType name="Customers" sql:relation="Cust"
                             sql:overflow-field="OverflowColumn" >
      <AttributeType name="CustomerID" />
      <AttributeType name="CompanyName"  />
      <AttributeType name="City"  />
      <AttributeType name="HomePhone" />
      <attribute type="CustomerID"  />
      <attribute type="CompanyName"  />
      <attribute type="City" />
      <attribute type="HomePhone" sql:map-field="0" />
   </ElementType>
</Schema>