次の方法で共有


注釈の解釈 - sql:mapped

適用対象: SQL Server Azure SQL Database

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>