共用方式為


註解解譯 - sql:mapped

適用於:SQL ServerAzure SQL 資料庫

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 架構會識別溢位數據行 (OverflowColumn),其中 XML 大量載入會儲存此未處理的數據。

測試工作範例

  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>