Поделиться через


Указание связей с помощью sql:relationship (SQLXML 4.0)

Элементы в XML-документе могут быть связаны. Элементы могут быть вложены иерархически, а связи IDREF или IDREFS можно указать между элементами.

Например, в схеме <XSD элемент Customer> содержит <дочерние элементы Order> . При сопоставлении схемы с базой данных <AdventureWorks элемент Customer> сопоставляется с таблицей Sales.Customer, а <элемент Order> сопоставляется с таблицей Sales.SalesOrderHeader. Эти базовые таблицы, Sales.Customer и Sales.SalesOrderHeader, связаны, так как клиенты размещают заказы. CustomerID в таблице Sales.SalesOrderHeader — это внешний ключ, ссылающийся на первичный ключ CustomerID в таблице Sales.Customer. Эти связи можно установить между элементами схемы сопоставления с помощью заметки sql:relationship .

В аннотированной схеме XSD заметка используется для иерархического вложения элементов схемы sql:relationship на основе первичных ключей и внешних связей ключей между базовыми таблицами, с которыми сопоставляются элементы. При указании заметки sql:relationship необходимо определить следующее:

  • Родительская таблица (Sales.Customer) и дочерняя таблица (Sales.SalesOrderHeader).

  • Столбец или столбцы, составляющие связь между родительскими и дочерними таблицами. Например, столбец CustomerID, который отображается как в родительских, так и в дочерних таблицах.

Эта информация используется для создания правильной иерархии.

Чтобы указать имена таблиц и необходимые сведения о соединении, в заметке sql:relationship указываются следующие атрибуты. Эти атрибуты допустимы только с элементом <sql:relationship> :

Имя
Указывает уникальное имя связи.

Родитель
Указывает родительское отношение (таблица). Это необязательный атрибут; Если атрибут не указан, имя родительской таблицы получается из сведений в дочерней иерархии в документе. Если схема задает две иерархии родительско-дочерних элементов, которые используют одни и те же <sql:relationship, но разные родительские элементы, не указывайте родительский атрибут в sql:relationship>>.< Эти сведения получаются из иерархии в схеме.

родительский ключ
Указывает родительский ключ родительского элемента. Если родительский ключ состоит из нескольких столбцов, значения задаются пробелом между ними. Существует позициальное сопоставление значений, указанных для многоклиумного ключа и соответствующего дочернего ключа.

дочерний
Указывает дочернее отношение (таблица).

дочерний ключ
Указывает дочерний ключ в дочернем элементе, ссылающийся на родительский ключ в родительском элементе. Если дочерний ключ состоит из нескольких атрибутов (столбцов), значения дочернего ключа указываются пробелом между ними. Существует позициальное сопоставление значений, указанных для многоклимонного ключа и соответствующего родительского ключа.

Обратный
Этот атрибут, указанный в <sql:relationship> , используется диаграммами обновления. Дополнительные сведения см. в разделе "Указание атрибута sql:inverse" в sql:relationship.

Заметка sql:key-fields должна быть указана в элементе, который содержит дочерний элемент, имеющий <sql:relationship> , определенный между элементом и дочерним элементом, и не предоставляющий первичный ключ таблицы, указанной в родительском элементе. Даже если схема не указывает <sql:relationship>, необходимо указать sql:key-fields , чтобы создать правильную иерархию. Дополнительные сведения см. в разделе "Определение ключевых столбцов с помощью полей sql:key-fields".

Чтобы создать правильное вложение в результате, рекомендуется sql:key-fields указывать во всех схемах.

Примеры

Чтобы создать рабочие образцы на основе следующих примеров, необходимо выполнить определенные требования. Дополнительные сведения см. в разделе "Требования к выполнению примеров SQLXML".

А. Указание заметки sql:relationship для элемента

Следующая аннотированная схема XSD включает <элементы Customer> и <Order> . Элемент <Order> является дочерним элементом <элемента Customer> .

В схеме sql:relationship заметка указывается в дочернем элементе <Order> . Сама связь определена в элементе <xsd:appinfo> .

Элемент <связи> определяет CustomerID в таблице Sales.SalesOrderHeader как внешний ключ, который ссылается на первичный ключ CustomerID в таблице Sales.Customer. Поэтому заказы, принадлежащие клиенту, отображаются как дочерний элемент этого <элемента 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-relationshipT.xml в том же каталоге, где вы сохранили sql-relationship.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>  

В. Указание цепочки связей

В этом примере предположим, что требуется следующий XML-документ, используя данные, полученные из базы данных AdventureWorks:

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

Для каждого заказа в таблице Sales.SalesOrderHeader XML-документ имеет один <элемент Order> . И каждый <элемент Order> содержит список дочерних элементов Product>, по одному для каждого продукта, запрошенного< в заказе.

Чтобы указать схему XSD, которая создаст эту иерархию, необходимо указать две связи: OrderOD и ODProduct. Связь OrderOD указывает связь "родительский-дочерний" между таблицами Sales.SalesOrderHeader и Sales.SalesOrderDetail. Связь ODProduct указывает связь между таблицами Sales.SalesOrderDetail и Production.Product.

В следующей схеме заметка msdata:relationship элемента <Product> указывает два значения: OrderOD и ODProduct. Порядок указания этих значений важен.

<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>  

Вместо указания именованной связи можно указать анонимную связь. В этом случае все содержимое заметки<>... </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. Скопируйте приведенный ниже шаблон и вставьте его в текстовый файл. Сохраните файл как relationshipChainT.xml в том же каталоге, где вы сохранили relationshipChain.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>  

С. Указание заметки о связи для атрибута

Схема в этом примере включает элемент Customer с дочерним элементом CustomerID>> и атрибутом <<OrderIDList типа IDREFS. Элемент <Customer> сопоставляется с таблицей Sales.Customer в базе данных AdventureWorks. По умолчанию область этого сопоставления применяется ко всем дочерним элементам или атрибутам, если sql:relation не указано в дочернем элементе или атрибуте, в этом случае соответствующая связь первичного ключа или внешнего ключа должна быть определена с помощью <элемента связи> . А дочерний элемент или атрибут, указывающий другую таблицу с помощью 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-attributeT.xml в том же каталоге, где вы сохранили relationship-on-attribute.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>  

Д. Указание sql:relationship для нескольких элементов

В этом примере аннотированная схема XSD содержит <элементы Customer>, <Order и OrderDetail>>.<

Элемент <Order> является дочерним элементом <элемента Customer> . <sql:relationship> указывается в дочернем элементе <Order> , поэтому заказы, принадлежащие клиенту, отображаются как дочерние элементы <Customer>.

Элемент Order включает дочерний <элемент OrderDetail>>.< <sql:relationship> указывается в дочернем элементе OrderDetail, поэтому сведения о порядке, относящиеся к заказу, отображаются как дочерние элементы этого< элемента 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-elementsT.xml в том же каталоге, где вы сохранили relationship-multiple-elements.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>  

Е. Указание <sql:relationship> без родительского атрибута

В этом примере показано указание <sql:relationship> без родительского атрибута. Например, предположим, что у вас есть следующие таблицы сотрудников:

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

В следующем представлении XML есть <элементы Emp1 и Emp2, сопоставленные с таблицами Sales.Emp1> и Sales.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> с помощью родительского атрибута. В этой ситуации родительский атрибут в sql:relationship> не указан. Сведения о родительском атрибуте< получаются из иерархии в схеме.

Проверка образца запроса XPath к схеме
  1. Создайте эти таблицы в базе данных AdventureWorks:

    USE AdventureWorks  
    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-noparentT.xml в том же каталоге, где вы сохранили relationship-noparent.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>