次の方法で共有


sql:mapped (SQLXML 4.0)

XML 一括読み込みでは、XSD スキーマ内の sql:mapped 注釈が一般的な方法で処理されます。つまり、マッピング スキーマで要素または属性に sql:mapped="false" が指定されている場合、対応する列への関連データの格納は試行されません。

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>