Megosztás a következőn keresztül:


Kapcsolatok meghatározása sql:relationship (SQLXML 4.0) használatával

A következőkre vonatkozik:SQL ServerAzure SQL Database

Az XML dokumentum elemei összefügghetnek. Az elemek hierarchikusan beágyazhatók, és az elemek között ID, IDREF vagy IDREFS kapcsolatok is meghatározhatók.

Például egy XSD sémában egy <Ügyfél> elem tartalmaz <Order> gyermekelemeket. Amikor a séma az AdventureWorks adatbázishoz van leképezve, az <Ügyfél> elem a Sales.Customer táblához, a <Rendelés> elem pedig a Sales.SalesOrderHeader táblához csatlakozik. Ezek az alaptáblák, a Sales.Customer és a Sales.SalesOrderHeader azért kapcsolódnak össze, mert az ügyfelek rendelést adnak le. A Sales.SalesOrderHeader táblában található CustomerID egy idegen kulcs, amely a Sales.Customer tábla CustomerID elsődleges kulcsára utal. Ezeket a kapcsolatokat a térképezet-séma elemek között a sql:relationship annotációval lehet létrehozni.

Az annotált XSD sémában a sql:relationship annotációt használják a séma elemeinek hierarchikusan beágyazására, az elsődleges kulcs- és idegen kulcskapcsolatok alapján az alaptáblák között, amelyekhez az elemek leképeznek. A sql:relationship annotáció meghatározásához a következőket kell azonosítanod:

  • Az alaptábla (Sales.Customer) és a gyermektábla (Sales.SalesOrderHeader).

  • Az oszlop vagy oszlopok, amelyek a szülő- és gyermektáblák közötti kapcsolatot alkotják. Például a CustomerID oszlop, amely mind a szülő, mind a gyermektáblában jelenik meg.

Ezt az információt használják fel a megfelelő hierarchia létrehozására.

A táblanevek és a szükséges csatlakozási információk megadásához a sql:relationship annotációban a következő attribútumokat jelölik meg. Ezek az attribútumok csak a <sql:relationship> elem esetén érvényesek:

Név
Megadja a kapcsolat egyedi nevét.

Szülő
Megadja a szülői relációt (táblát). Ez opcionális tulajdonság; Ha az attribútum nincs megadva, a szülőtábla nevét a dokumentum gyermekhierarchiájában található információkból kapjuk. Ha a séma két szülő-gyermek hierarchiát határoz meg, amelyek ugyanazt <a sql:relationship-et> használják, de eltérő szülőelemeket, akkor a sql:relationship-ben> nem határozd meg a szülő attribútumot<. Ez az információ a séma hierarchiájából származik.

szülőkulcs
Megadja a szülő szülőkulcsát. Ha a szülőkulcs több oszlopból áll, az értékeket köztük között egy teres jelzik. A többoszlopos kulcs és a megfelelő gyermekkulcs értékei között pozicionális leképezés van.

Gyermek
Megadja a gyermekrelációt (tábla).

gyermekkulcs
Megadja a gyermekkulcsot a gyermekben, amely a parent-kulcsra utal a parent-kulcsra a parent között. Ha a gyerekkulcs több attribútumból (oszlopból) áll, a gyermekkulcs értékeket köztük egy szóköz segítségével határozzák meg. A többoszlopos kulcs és a megfelelő szülőkulcs értékei között pozicionális leképezés van.

Inverz
Ezt a sql:relationship-en<> megadott attribútumot az updategrams használja. További információért lásd: A sql:inverse attribútum meghatározása sql:relationship-en.

A sql:key-fields annotációt olyan elemben kell megadni, amely tartalmaz egy gyermek elemet, amelynek sql<:kapcsolata> van definiálva az elem és a gyermek között, és amely nem adja meg a szülőelemben megadott táblázat elsődleges kulcsát. Még ha a séma nem is határozza <meg sql:relationship-et>, akkor meg kell határoznod a sql:key-mezőket , hogy a megfelelő hierarchiát létrehozd. További információért lásd: Kulcsoszlopok azonosítása sql:key-fields használatával.

Az eredmény megfelelő beágyazásához ajánlott, hogy minden sémában megadják a sql:kulcsmezőket .

Példák

A következő példák alapján működő minták létrehozásához bizonyos követelményeknek kell megfelelned. További információért lásd: Az SQLXML futtatási követelmények példái.

A. A sql:relation annotáció meghatározása egy elemen

A következő annotált XSD séma tartalmazza <az Ügyfél> és <Rendelés> elemeket. A< Order> elem a Customer> elem gyermekeleme<.

A sémában a sql:relationship annotáció a <Order> child elemen van megadva. Maga a kapcsolat az <xsd:appinfo> elemben van definiálva.

A< kapcsolati> elem azonosítja a CustomerID-t a Sales.SalesOrderHeader táblában, mint egy idegen kulcsot, amely a Sales.Customer táblában található CustomerID elsődleges kulcsra utal. Ezért az ügyfélhez tartozó rendelések az adott ügyfélelem> gyermekelemeként< jelennek meg.

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

Az előző séma egy nevelt kapcsolatot használ. Megadhatsz egy névtelen kapcsolatot is. Az eredmények ugyanazok.

Ez az átdolgozott séma, amelyben egy névtelen kapcsolatot jelölnek meg:

<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>  
Egy minta-XPath lekérdezés tesztelése a sémához
  1. Másold le a fenti sémakódot, és illesztsd be egy szövegfájlba. Mentse el a fájlt sql-relationship.xml.

  2. Másold le az alábbi sablont, és illesztsd be szövegfájlba. Mentsd a fájlt sql-relationshipT.xml-ként ugyanabba a könyvtárba, ahol sql-relationship.xmlmentetted.

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

    A leképezési sémához (sql-relationship.xml) megadott könyvtári út viszonyítja azt a könyvtárat, ahol a sablon mentő. Abszolút út is meghatározható, például:

    mapping-schema="C:\MyDir\sql-relationship.xml"  
    
  3. Hozd létre és használd az SQLXML 4.0 Test Scriptet (Sqlxml4test.vbs) a sablon végrehajtásához.

    További információért lásd: Using ADO to execute SQLXML Queries.

Az eredményhalmaz a következő:

<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. Kapcsolatlánc meghatározása

Ebben a példában tegyük fel, hogy a következő XML dokumentumot szeretnéd az AdventureWorks adatbázisból származó adatok felhasználásával:

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

A Sales.SalesOrderHeader tábla minden rendeléséhez az XML dokumentumnak egy <Order> elem található. És minden <Order> elemnek van egy listája a< Termék> gyermekelemeiről, egyet minden termékhez, amelyet a rendelésben kértek.

Ahhoz, hogy megadjunk egy XSD sémát, amely ezt a hierarchiát hozza, két kapcsolatot kell megadnod: OrderOD és ODProduct. Az OrderOD kapcsolat meghatározza a Sales.SalesOrderHeader és a Sales.SalesOrderDetail táblák közötti szülő-gyermek kapcsolatot. Az ODProduct kapcsolat meghatározza a Sales.SalesOrderDetail és Production.Product táblák közötti kapcsolatot.

A következő sémában a Product> elem msdata:relation annotációja< két értéket ad meg: OrderOD és ODProduct. Fontos, hogy milyen sorrendben vannak ezek az értékek.

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

Ahelyett, hogy megnevezett kapcsolatot adnál meg, megadhatsz egy anonim kapcsolatot. Ebben az esetben az annotáció> teljes tartalma<... <az /annotation>, amely a két kapcsolatot írja le, a Product> gyermekelemeként< jelenik meg.

<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>  
Egy minta-XPath lekérdezés tesztelése a sémához
  1. Másold le a fenti sémakódot, és illesztsd be egy szövegfájlba. Mentse el a fájlt relationshipChain.xml.

  2. Másold le az alábbi sablont, és illesztsd be szövegfájlba. Mentsd a fájlt relationshipChainT.xml-ként ugyanabba a könyvtárba, ahol relationshipChain.xmlmentetted.

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

    A leképezési sémához (relationshipChain.xml) megadott könyvtári út viszonyítja azt a könyvtárat, ahol a sablon mentő. Abszolút út is meghatározható, például:

    mapping-schema="C:\MyDir\relationshipChain.xml"  
    
  3. Hozd létre és használd az SQLXML 4.0 Test Scriptet (Sqlxml4test.vbs) a sablon végrehajtásához.

    További információért lásd: Using ADO to execute SQLXML Queries.

Az eredményhalmaz a következő:

<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. A kapcsolati annotáció meghatározása egy attribútumon

A példa sémája tartalmaz egy <Ügyfél> elemet egy <CustomerID> gyermekelemmel és egy IDREFS típusú OrderIDList attribútummal. Az <ügyfélelem> az AdventureWorks adatbázisban található Sales.Customer táblához kerül. Alapértelmezés szerint ennek a leképezésnek a hatóköre minden gyermekelemre vagy attribútumra vonatkozik, kivéve, ha a sql: relation nincs megadva a gyermekelemen vagy attribútumon, ebben az esetben a megfelelő elsődleges kulcs/idegen kulcs kapcsolatot a <kapcsolat> elemmel kell definiálni. És a gyermekelem vagy attribútum, amely a reláció annotációjával határozza meg a különböző táblát, szintén meg kell határoznia a kapcsolat annotációját.

<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>  
Egy minta-XPath lekérdezés tesztelése a sémához
  1. Másold le a fenti sémakódot, és illesztsd be egy szövegfájlba. Mentse el a fájlt relationship-on-attribute.xml.

  2. Másold ki a következő sablont, és illesztsd be egy fájlba. Mentsd a fájlt relationship-on-attributeT.xml-ként ugyanabba a könyvtárba, ahol relationship-on-attribute.xmlmentetted. A sablonban található lekérdezés olyan ügyfelet választ, akinek a CustomerID-je 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>  
    

    A leképezési sémához (relationship-on-attribute.xml) megadott könyvtári út viszonyítja azt a könyvtárat, ahol a sablon mentő. Abszolút út is meghatározható, például:

    mapping-schema="C:\MyDir\relationship-on-attribute.xml"  
    
  3. Hozd létre és használd az SQLXML 4.0 Test Scriptet (Sqlxml4test.vbs) a sablon végrehajtásához.

    További információért lásd: Using ADO to execute SQLXML Queries.

Az eredményhalmaz a következő:

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

D. Több elemre vonatkozó sql:relation meghatározása

Ebben a példában az annotált XSD séma tartalmazza a <Customer>, <Order> és <OrderDetail> elemeket.

A< Order> elem a Customer> elem gyermekeleme<. <a sql:relationship> a <Order> child elemen van megadva; ezért a rendelések, amelyek egy ügyfélhez tartoznak, az Ügyfél> gyermekelemeiként< jelennek meg.

A< Order> elem tartalmazza a <OrderDetail> gyermek elemet. <a sql:relationship> a <OrderDetail> gyermekelemen van megadva, így a rendeléshez tartozó sorrend részletei az adott Order> elem gyermekelemeiként< jelennek meg.

<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>  
Egy minta-XPath lekérdezés tesztelése a sémához
  1. Másold le a fenti sémakódot, és illesztsd be egy szövegfájlba. Mentse el a fájlt relationship-multiple-elements.xml.

  2. Másold le a következő sablont, és illesztsd be egy szövegfájlba. Mentsd a fájlt relationship-multiple-elementsT.xml-ként ugyanabba a könyvtárba, ahol relationship-multiple-elements.xmlmentetted. A sablonban lévő lekérdezés egy olyan ügyfél rendelési adatait adja vissza, akinek a CustomerID 1 és 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>  
    

    A leképezési sémához (relationship-multiple-elements.xml) megadott könyvtári út viszonyítja azt a könyvtárat, ahol a sablon mentő. Abszolút út is meghatározható, például:

    mapping-schema="C:\MyDir\relationship-multiple-elements.xml"  
    
  3. Hozd létre és használd az SQLXML 4.0 Test Scriptet (Sqlxml4test.vbs) a sablon végrehajtásához.

    További információért lásd: Using ADO to execute SQLXML Queries.

Az eredményhalmaz a következő:

<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. A <sql:relationship> meghatározása a parent attribútum nélkül

Ez a példa szemlélteti a <sql:relationship> meghatározását a szülő attribútum nélkül. Tegyük fel, hogy a következő munkavállalói táblázatok vannak:

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

A következő XML nézet az <Emp1> és <Emp2> elemeket a Sales.Emp1 és Sales.Emp2 táblákhoz rendeli:

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

A sémában mind <az Emp1> , mind <az Emp2> elem EmpType típusú. Az EmpType típus egy <Order> gyermekelemet és a hozzá tartozó <sql:kapcsolatot> írja le. Ebben az esetben nincs egyetlen szülő, amelyet <a sql:relationship-ben> azonosítani lehetne a szülő attribútummal azonosítani. Ebben a helyzetben nem a szülő attribútumot a <sql:relationship> rendszerben adjuk meg; a szülő attribútuminformáció a séma hierarchiájából származik.

Egy minta-XPath lekérdezés tesztelése a sémához
  1. Hozd létre ezeket a táblázatokat az AdventureWorks adatbázisban:

    USE AdventureWorks2022;
    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. Ezeket a mintaadatokat adjuk fel a táblázatokba:

    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. Másold le a fenti sémakódot, és illesztsd be egy szövegfájlba. Mentse el a fájlt relationship-noparent.xml.

  4. Másold le a következő sablont, és illesztsd be egy szövegfájlba. Mentsd a fájlt relationship-noparentT.xml-ként ugyanabba a könyvtárba, ahol relationship-noparent.xmlmentetted. A sablonban lévő lekérdezés kiválasztja az <összes Emp1> elemet (tehát az szülő az Emp1).

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

    A leképezési sémához (relationship-noparent.xml) megadott könyvtári út viszonyítja azt a könyvtárat, ahol a sablon mentő. Abszolút út is meghatározható, például:

    mapping-schema="C:\MyDir\relationship-noparent.xml"  
    
  5. Hozd létre és használd az SQLXML 4.0 Test Scriptet (Sqlxml4test.vbs) a sablon végrehajtásához.

    További információért lásd: Using ADO to execute SQLXML Queries.

Íme egy részleges eredményhalmaz:

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