注釈の解釈 - 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 スキーマは、XML 一括読み込みによってこの未使用のデータが格納されるオーバーフロー列 (OverflowColumn) を識別します。

実際のサンプルをテストするには

  1. tempdb データベースに次の表を作成します。

    Note

    Microsoft FabricのAzure SQL DatabaseやSQLデータベースでは、USE文は利用できず、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>