sql:relationship を使用した、リレーションシップの指定 (SQLXML 4.0)

XML ドキュメント内の要素は関連付けることができます。要素は階層的に入れ子にでき、要素間に ID、IDREF、または IDREFS のリレーションシップを指定することができます。

たとえば、XSD スキーマで、<Customer> 要素に <Order> 子要素が含まれているとします。このスキーマを AdventureWorks2008R2 データベースにマップすると、<Customer> 要素は Sales.Customer テーブルにマップされ、<Order> 要素は Sales.SalesOrderHeader テーブルにマップされます。これらの基になる Sales.Customer および Sales.SalesOrderHeader テーブルの間には、顧客 (Customer) が注文 (Order) するという関係があります。ここで、Sales.SalesOrderHeader テーブル内の CustomerID は、Sales.Customer テーブル内の CustomerID 主キーを参照する外部キーです。マッピング スキーマで要素間のリレーションシップを設定するには、sql:relationship 注釈を使用します。

注釈付き XSD スキーマでは、sql:relationship 注釈を使用して、要素のマップ先テーブルにおける主キーと外部キーのリレーションシップを基にスキーマ要素を階層的に入れ子にできます。sql:relationship 注釈を指定するときには、次を指定する必要があります。

  • 親テーブル (Sales.Customer) と子テーブル (Sales.SalesOrderHeader)。

  • 親テーブルと子テーブル間のリレーションシップを構成する列。たとえば、親テーブルと子テーブル両方にある CustomerID 列を指定します。

これらの情報を使用して、適切な階層が生成されます。

テーブル名と必要な結合情報を指定するには、sql:relationship 注釈に次の属性を指定します。これらの属性は、<sql:relationship> 要素でのみ有効です。

  • Name
    リレーションシップの一意な名前を指定します。

  • Parent
    親リレーション (テーブル) を指定します。これは省略可能な属性です。この属性を指定しない場合、親テーブル名はドキュメント内の子階層の情報から取得されます。スキーマの 1 つの <sql:relationship> で、親要素が異なる 2 つの親子階層を指定する場合、<sql:relationship> に親属性は指定しません。この情報はスキーマ内の階層から取得されます。

  • parent-key
    親の親キーを指定します。親キーが複数の列で構成される場合は、値をスペースで区切って指定します。複数列キーに指定される値と、それに対応する子キーに指定される値の間では、位置的なマッピングが行われます。

  • Child
    子リレーション (テーブル) を指定します。

  • child-key
    親の parent-key を参照する子の、子キーを指定します。子キーが複数の属性 (列) で構成される場合、child-key の値は、スペースで区切って指定します。複数列キーに指定される値と、それに対応する親キーに指定される値の間では、位置的なマッピングが行われます。

  • Inverse
    <sql:relationship> のこの属性は、アップデートグラムで使用されます。詳細については、「sql:relationship での sql:inverse 属性の指定 [SQLXML 4.0]」を参照してください。

要素に子要素が含まれ、要素と子要素の間に <sql:relationship> が定義されていても、親要素に指定されているテーブルの主キーが <sql:relationship> で提供されない場合は、要素内に sql:key-fields を指定する必要があります。スキーマで <sql:relationship> を指定しない場合でも、適切な階層を生成するには sql:key-fields を指定する必要があります。詳細については、「sql:key-fields を使用した、キー列の指定 [SQLXML 4.0]」を参照してください。

結果内に適切な入れ子を生成するには、すべてのスキーマで sql:key-fields を指定することをお勧めします。

次の例を使用した実際のサンプルを作成するには、特定の条件を満たす必要があります。詳細については、「SQLXML のサンプル実行のための必要条件」を参照してください。

A. 要素に sql:relationship 注釈を指定する

次の注釈付き XSD スキーマには <Customer><Order> 要素が含まれています。<Order> 要素は <Customer> 要素の子要素です。

スキーマでは、<Order> 子要素に sql:relationship 注釈が指定されています。リレーションシップ自体は <xsd:appinfo> 要素で定義されています。

<relationship> 要素では、Sales.SalesOrderHeader テーブルの CustomerID が、Sales.Customer テーブルの CustomerID 主キーを参照する外部キーとして指定されています。したがって、顧客の注文は、<Customer> 要素の子要素として表されます。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
  <xsd:appinfo>
    <sql:relationship name="CustOrders"
          parent="Sales.Customer"
          parent-key="CustomerID"
          child="Sales.SalesOrderHeader"
          child-key="CustomerID" />
  </xsd:appinfo>
</xsd:annotation>

  <xsd:element name="Customer" sql:relation="Sales.Customer" type="CustomerType" />
   <xsd:complexType name="CustomerType" >
     <xsd:sequence>
        <xsd:element name="Order" 
                     sql:relation="Sales.SalesOrderHeader"
                    sql:relationship="CustOrders" >
           <xsd:complexType>
              <xsd:attribute name="SalesOrderID" type="xsd:integer" />
              <xsd:attribute name="CustomerID" type="xsd:string" />
           </xsd:complexType>
        </xsd:element>
     </xsd:sequence>
        <xsd:attribute name="CustomerID"   type="xsd:string" /> 
    </xsd:complexType>

</xsd:schema>

上のスキーマでは名前付きリレーションシップを使用しましたが、名前のないリレーションシップを指定することもできます。この結果は同じです。

次は、スキーマを変更し、名前のないリレーションシップを指定した例です。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">

  <xsd:element name="Customer" sql:relation="Sales.Customer"  type="CustomerType" />
   <xsd:complexType name="CustomerType" >
     <xsd:sequence>
        <xsd:element name="Order" 
                     sql:relation="Sales.SalesOrderHeader">
           <xsd:annotation>
            <xsd:appinfo>
              <sql:relationship 
                parent="Sales.Customer"
                parent-key="CustomerID"
                child="Sales.SalesOrderHeader"
                child-key="CustomerID" />
            </xsd:appinfo>
           </xsd:annotation>
           <xsd:complexType>
              <xsd:attribute name="SalesOrderID" type="xsd:integer" />
              <xsd:attribute name="CustomerID" type="xsd:string" />
           </xsd:complexType>
        </xsd:element>
     </xsd:sequence>
        <xsd:attribute name="CustomerID"   type="xsd:string" /> 
    </xsd:complexType>

</xsd:schema>

スキーマに対してサンプル XPath クエリをテストするには

  1. 上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、sql-relationship.xml として保存します。

  2. 次のテンプレートをコピーして、テキスト ファイルに貼り付け、sql-relationship.xml を保存したディレクトリに sql-relationshipT.xml として保存します。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="sql-relationship.xml">
            /Customer[@CustomerID=1]
        </sql:xpath-query>
    </ROOT>
    

    マッピング スキーマ (sql-relationship.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。次のように、絶対パスを指定することもできます。

    mapping-schema="C:\MyDir\sql-relationship.xml"
    
  3. SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。

    詳細については、「ADO を使用した SQLXML クエリの実行」を参照してください。

次に結果セットを示します。

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Customer CustomerID="1"> 
    <Order OrderID="43860" CustomerID="1" /> 
    <Order OrderID="44501" CustomerID="1" /> 
    <Order OrderID="45283" CustomerID="1" /> 
    <Order OrderID="46042" CustomerID="1" /> 
  </Customer> 
</ROOT>

B. リレーションシップ チェーンを指定する

この例では、AdventureWorks2008R2 データベースから取得したデータを使用して、次の XML ドキュメントを要求するとします。

<Order SalesOrderID="43659">
  <Product Name="Mountain Bike Socks, M"/> 
  <Product Name="Sport-100 Helmet, Blue"/>
  ...
</Order>
...

XML ドキュメントには、Sales.SalesOrderHeader テーブル内の注文ごとに 1 つの <Order> 要素が含まれています。各 <Order> 要素には、注文した製品ごとに 1 つずつ、<Product> 子要素が含まれています。

この階層を生成する XSD スキーマを指定するには、OrderOD と ODProduct の 2 つのリレーションシップを指定する必要があります。OrderOD リレーションシップでは、Sales.SalesOrderHeader テーブルと Sales.SalesOrderDetail テーブル間の親子リレーションシップを指定します。ODProduct リレーションシップでは、Sales.SalesOrderDetail テーブルと Production.Product テーブル間のリレーションシップを指定します。

次のスキーマでは、<Product> 要素に msdata:relationship 注釈が指定され、OrderOD と ODProduct の 2 つの値が指定されています。これらの値の指定順序は重要です。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:msdata="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
  <xsd:appinfo>
    <msdata:relationship name="OrderOD"
          parent="Sales.SalesOrderHeader"
          parent-key="SalesOrderID"
          child="Sales.SalesOrderDetail"
          child-key="SalesOrderID" />

    <msdata:relationship name="ODProduct"
          parent="Sales.SalesOrderDetail"
          parent-key="ProductID"
          child="Production.Product"
          child-key="ProductID" />
  </xsd:appinfo>
</xsd:annotation>

  <xsd:element name="Order" msdata:relation="Sales.SalesOrderHeader" 
               msdata:key-fields="SalesOrderID" type="OrderType" />
   <xsd:complexType name="OrderType" >
     <xsd:sequence>
        <xsd:element name="Product" msdata:relation="Production.Product" 
                     msdata:key-fields="ProductID"
                     msdata:relationship="OrderOD ODProduct">
          <xsd:complexType>
             <xsd:attribute name="Name" type="xsd:string" />
          </xsd:complexType>
        </xsd:element>
     </xsd:sequence>
        <xsd:attribute name="SalesOrderID"   type="xsd:integer" /> 
    </xsd:complexType>
</xsd:schema>

名前付きリレーションシップを指定する代わりに、匿名のリレーションシップを指定することもできます。この場合、2 つのリレーションシップを記述する <annotation> から </annotation> までのコンテンツ全体が、<Product> の子要素として表示されます。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:msdata="urn:schemas-microsoft-com:mapping-schema">

  <xsd:element name="Order" msdata:relation="Sales.SalesOrderHeader" 
               msdata:key-fields="SalesOrderID" type="OrderType" />

   <xsd:complexType name="OrderType" >
     <xsd:sequence>
        <xsd:element name="Product" msdata:relation="Production.Product" 
                     msdata:key-fields="ProductID" >
         <xsd:annotation>
          <xsd:appinfo>
           <msdata:relationship 
               parent="Sales.SalesOrderHeader"
               parent-key="SalesOrderID"
               child="Sales.SalesOrderDetail"
               child-key="SalesOrderID" />

           <msdata:relationship 
               parent="Sales.SalesOrderDetail"
               parent-key="ProductID"
               child="Production.Product"
               child-key="ProductID" />
         </xsd:appinfo>
       </xsd:annotation>
       <xsd:complexType>
          <xsd:attribute name="Name" type="xsd:string" />
       </xsd:complexType>
     </xsd:element>
   </xsd:sequence>
   <xsd:attribute name="SalesOrderID"   type="xsd:integer" /> 
  </xsd:complexType>
 </xsd:schema>

スキーマに対してサンプル XPath クエリをテストするには

  1. 上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、relationshipChain.xml として保存します。

  2. 次のテンプレートをコピーして、テキスト ファイルに貼り付け、relationshipChain.xml を保存したディレクトリに relationshipChainT.xml として保存します。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="relationshipChain.xml">
            /Order
        </sql:xpath-query>
    </ROOT>
    

    マッピング スキーマ (relationshipChain.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。次のように、絶対パスを指定することもできます。

    mapping-schema="C:\MyDir\relationshipChain.xml"
    
  3. SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。

    詳細については、「ADO を使用した SQLXML クエリの実行」を参照してください。

次に結果セットを示します。

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Order SalesOrderID="43659">
    <Product Name="Mountain Bike Socks, M" /> 
    <Product Name="Sport-100 Helmet, Blue" /> 
    <Product Name="AWC Logo Cap" /> 
    <Product Name="Long-Sleeve Logo Jersey, M" /> 
    <Product Name="Long-Sleeve Logo Jersey, XL" /> 
    ...
  </Order>
  ...
</ROOT>

C. 属性にリレーションシップ注釈を指定する

この例のスキーマでは、<Customer> 要素に <CustomerID> 子要素と IDREFS 型の OrderIDList 属性が含まれています。<Customer> 要素は、AdventureWorks2008R2 データベースの Sales.Customer テーブルにマップされます。既定では、このマッピングのスコープは、子要素または属性に sql:relation が指定されない限りすべての子要素または属性に適用されます。子要素または属性に sql:relation を指定する場合は、<relationship> 要素を使って適切な主キー/外部キー リレーションシップを定義する必要があります。子要素または属性で relation 注釈を使って異なるテーブルを指定する場合は、relationship 注釈も指定する必要があります。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
  <xsd:appinfo>
    <sql:relationship name="CustOrders"
          parent="Sales.Customer"
          parent-key="CustomerID"
          child="Sales.SalesOrderHeader"
          child-key="CustomerID" />
     </xsd:appinfo>
</xsd:annotation>

  <xsd:element name="Customer" sql:relation="Sales.Customer" type="CustomerType" />
   <xsd:complexType name="CustomerType" >
     <xsd:sequence>
        <xsd:element name="CustomerID"   type="xsd:string" /> 
     </xsd:sequence>
     <xsd:attribute name="OrderIDList" 
                     type="xsd:IDREFS" 
                     sql:relation="Sales.SalesOrderHeader" 
                     sql:field="SalesOrderID"
                     sql:relationship="CustOrders" >
        </xsd:attribute>
    </xsd:complexType>
</xsd:schema>

スキーマに対してサンプル XPath クエリをテストするには

  1. 上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、relationship-on-attribute.xml として保存します。

  2. 次のテンプレートをコピーして、ファイルに貼り付け、relationship-on-attribute.xml を保存したディレクトリに relationship-on-attributeT.xml として保存します。このテンプレートのクエリでは、CustomerID が 1 の顧客が選択されます。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="relationship-on-attribute.xml">
        /Customer[CustomerID=1]
      </sql:xpath-query>
    </ROOT>
    

    マッピング スキーマ (relationship-on-attribute.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。次のように、絶対パスを指定することもできます。

    mapping-schema="C:\MyDir\relationship-on-attribute.xml"
    
  3. SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。

    詳細については、「ADO を使用した SQLXML クエリの実行」を参照してください。

次に結果セットを示します。

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Customer OrderIDList="43860 44501 45283 46042">
    <CustomerID>1</CustomerID> 
  </Customer>
</ROOT>

D. 複数の要素に sql:relationship を指定する

この例では、注釈付き XSD スキーマに <Customer><Order>、および <OrderDetail> 要素が含まれています。

<Order> 要素は <Customer> 要素の子要素であり、<Order> 子要素に <sql:relationship> が指定されています。したがって、顧客の注文は <Customer> の子要素として表されます。

<Order> 要素には <OrderDetail> 子要素が含まれており、<OrderDetail> 子要素に <sql:relationship> が指定されています。したがって、注文の詳細は <Order> 要素の子要素として表されます。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
  <xsd:appinfo>
    <sql:relationship name="CustOrders"
        parent="Sales.Customer"
        parent-key="CustomerID"
        child="Sales.SalesOrderHeader"
        child-key="CustomerID" />

    <sql:relationship name="OrderOrderDetail"
        parent="Sales.SalesOrderHeader"
        parent-key="SalesOrderID"
        child="Sales.SalesOrderDetail"
        child-key="SalesOrderID" />
  </xsd:appinfo>
</xsd:annotation>

  <xsd:element name="Customer" sql:relation="Sales.Customer" >
   <xsd:complexType>
     <xsd:sequence>
        <xsd:element name="Order" sql:relation="Sales.SalesOrderHeader"  
              sql:relationship="CustOrders" maxOccurs="unbounded" >
          <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="OrderDetail" 
                             sql:relation="Sales.SalesOrderDetail" 
                             sql:relationship="OrderOrderDetail" 
                             maxOccurs="unbounded" >
                  <xsd:complexType>
                    <xsd:attribute name="SalesOrderID" type="xsd:integer" />
                    <xsd:attribute name="ProductID" type="xsd:string" />
                    <xsd:attribute name="OrderQty" type="xsd:integer" />
                  </xsd:complexType>
                </xsd:element>
              </xsd:sequence>
              <xsd:attribute name="SalesOrderID" type="xsd:integer" />
              <xsd:attribute name="OrderDate" type="xsd:date" />
              <xsd:attribute name="CustomerID" type="xsd:string" />
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
      <xsd:attribute name="CustomerID" type="xsd:string" />
     </xsd:complexType>
  </xsd:element>
</xsd:schema>

スキーマに対してサンプル XPath クエリをテストするには

  1. 上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、relationship-multiple-elements.xml として保存します。

  2. 次のテンプレートをコピーして、テキスト ファイルに貼り付け、relationship-multiple-elements.xml を保存したディレクトリに relationship-multiple-elementsT.xml として保存します。このテンプレート内のクエリでは、CustomerID が 1、SalesOrderID が 43860 の顧客の注文情報が返されます。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="relationship-multiple-elements.xml">
        /Customer[@CustomerID=1]/Order[@SalesOrderID=43860]
      </sql:xpath-query>
    </ROOT>
    

    マッピング スキーマ (relationship-multiple-elements.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。次のように、絶対パスを指定することもできます。

    mapping-schema="C:\MyDir\relationship-multiple-elements.xml"
    
  3. SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。

    詳細については、「ADO を使用した SQLXML クエリの実行」を参照してください。

次に結果セットを示します。

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Order SalesOrderID="43860" OrderDate="2001-08-01" CustomerID="1">
     <OrderDetail SalesOrderID="43860" ProductID="761" OrderQty="2" /> 
     <OrderDetail SalesOrderID="43860" ProductID="770" OrderQty="1" /> 
     <OrderDetail SalesOrderID="43860" ProductID="758" OrderQty="2" /> 
     <OrderDetail SalesOrderID="43860" ProductID="765" OrderQty="2" /> 
     <OrderDetail SalesOrderID="43860" ProductID="732" OrderQty="1" /> 
     <OrderDetail SalesOrderID="43860" ProductID="762" OrderQty="1" /> 
     <OrderDetail SalesOrderID="43860" ProductID="738" OrderQty="1" /> 
     <OrderDetail SalesOrderID="43860" ProductID="768" OrderQty="1" /> 
     <OrderDetail SalesOrderID="43860" ProductID="753" OrderQty="2" /> 
     <OrderDetail SalesOrderID="43860" ProductID="729" OrderQty="1" /> 
     <OrderDetail SalesOrderID="43860" ProductID="763" OrderQty="1" /> 
     <OrderDetail SalesOrderID="43860" ProductID="756" OrderQty="1" /> 
  </Order>
</ROOT>

E. 親属性なしで <sql:relationship> を指定する

この例では、parent 属性なしで <sql:relationship> を指定する場合を示します。たとえば、次の従業員テーブルがあるとします。

Emp1(SalesPersonID, FirstName, LastName, ReportsTo)
Emp2(SalesPersonID, FirstName, LastName, ReportsTo)

次の XML ビューには、Sales.Emp1 および Sales.Emp2 テーブルにマップされる <Emp1><Emp2> という要素があります。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
  <xsd:appinfo>
    <sql:relationship name="EmpOrders"
          parent-key="SalesPersonID"
          child="Sales.SalesOrderHeader"
          child-key="SalesPersonID" />
     </xsd:appinfo>
</xsd:annotation>

  <xsd:element name="Emp1" sql:relation="Sales.Emp1" type="EmpType" />
  <xsd:element name="Emp2" sql:relation="Sales.Emp2" type="EmpType" />
   <xsd:complexType name="EmpType" >
     <xsd:sequence>
        <xsd:element name="Order" 
                     sql:relation="Sales.SalesOrderHeader" 
                     sql:relationship="EmpOrders" >
          <xsd:complexType>
             <xsd:attribute name="SalesOrderID" type="xsd:integer" />
             <xsd:attribute name="CustomerID" type="xsd:string" />
          </xsd:complexType>
        </xsd:element>
     </xsd:sequence>
        <xsd:attribute name="SalesPersonID"   type="xsd:integer" /> 
        <xsd:attribute name="LastName"   type="xsd:string" /> 
    </xsd:complexType>

</xsd:schema>

このスキーマでは、<Emp1> 要素と <Emp2> 要素は両方とも EmpType 型です。EmpType 型では、<Order> 子要素と、対応する <sql:relationship> が記述されています。この場合、<sql:relationship>parent 属性を使って指定できる単一の親はありません。このようなとき、<sql:relationship>parent 属性は指定しません。parent 属性情報はスキーマ内の階層から取得されます。

スキーマに対してサンプル XPath クエリをテストするには

  1. AdventureWorks2008R2 データベース内に次のテーブルを作成します。

    USE AdventureWorks2008R2;
    GO
    CREATE TABLE Sales.Emp1 (
           SalesPersonID int primary key, 
           FirstName  varchar(20), 
           LastName   varchar(20), 
           ReportsTo int)
    Go
    CREATE TABLE Sales.Emp2 (
           SalesPersonID int primary key, 
           FirstName  varchar(20), 
           LastName   varchar(20), 
           ReportsTo int)
    Go
    
  2. テーブルに次のサンプル データを追加します。

    INSERT INTO Sales.Emp1 values (279, 'Nancy', 'Devolio',NULL);
    INSERT INTO Sales.Emp1 values (282, 'Andrew', 'Fuller',1);
    INSERT INTO Sales.Emp1 values (276, 'Janet', 'Leverling',1);
    INSERT INTO Sales.Emp2 values (277, 'Margaret', 'Peacock',3);
    INSERT INTO Sales.Emp2 values (283, 'Steven', 'Devolio',4);
    INSERT INTO Sales.Emp2 values (275, 'Nancy', 'Buchanan',5);
    INSERT INTO Sales.Emp2 values (281, 'Michael', 'Suyama',6);
    
  3. 上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、relationship-noparent.xml として保存します。

  4. 次のテンプレートをコピーして、テキスト ファイルに貼り付け、relationship-noparent.xml を保存したディレクトリに relationship-noparentT.xml として保存します。このテンプレートのクエリでは、すべての <Emp1> 要素が選択されます (したがって、親は Emp1 です)。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="relationship-noparent.xml">
            /Emp1
        </sql:xpath-query>
    </ROOT>
    

    マッピング スキーマ (relationship-noparent.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。次のように、絶対パスを指定することもできます。

    mapping-schema="C:\MyDir\relationship-noparent.xml"
    
  5. SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。

    詳細については、「ADO を使用した SQLXML クエリの実行」を参照してください。

次に結果セットの一部を示します。

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Emp1 SalesPersonID="276" LastName="Leverling">
  <Order SalesOrderID="43663" CustomerID="510" /> 
  <Order SalesOrderID="43666" CustomerID="511" /> 
  <Order SalesOrderID="43859" CustomerID="259" />
  ...
</Emp1>