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


Kulcsoszlopok azonosítása sql:key-fields (SQLXML 4.0) használatával

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

Amikor egy XPath lekérdezést egy XSD séma alapján jelölnek, a legtöbb esetben kulcsinformációra van szükség az eredmény megfelelő beágyazásához. A sql:kulcsmezők annotációjának meghatározása biztosítja, hogy a megfelelő hierarchia létrejön.

Megjegyzés:

A megfelelő féskelés érdekében ajánlott megadni sql:key-fields elemeket olyan elemekhez, amelyek táblázatokhoz fordulnak. A létrehozott XML érzékeny az alapul szolgáló eredményhalmaz rendezésére. Ha a sql:kulcsmezők nincsenek megadva, előfordulhat, hogy a generált XML nem lesz megfelelően kialakítva.

A sql:key-fields értéke azonosítja azokat az oszlopokat(okat), amelyek egyediségesen azonosítják a reláció sorait. Ha egy sor egyediségéhez több oszlop szükséges, az oszlopértékek szóközek szerint vannak kijelölve.

A sql:key-fields annotációt akkor kell használni, ha egy elem tartalmaz egy< sql:kapcsolatot>, amely az elem és egy gyermekelem között van definiálva, de nem adja meg a tábla elsődleges kulcsát, amely a szülőelemben van megadva.

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. Megfelelő fészkelés létrehozása, amikor <a sql:relationship> nem ad elegendő információt

Ez a példa megmutatja, hol kell megadni a sql:kulcsmezőket .

Vegyük figyelembe a következő sémát. A séma hierarchiát határoz meg a <Order> és <Customer> elemek között, amelyben a <Order> elem az anya, az <Ügyfél> elem pedig egy gyermek.

A< sql:relationship> címkét használják a szülő-gyermek kapcsolat meghatározására. A Sales.SalesOrderHeader táblában azonosítja a CustomerID-t az Sales.Customer tábla CustomerID gyermekkulcsaként, amely a Sales.Customer táblában található CustomerID gyermekkulcsra utal. A sql:relationship> által megadott< információk nem elegendőek ahhoz, hogy egyedileg azonosítsák a sorokat az anyatáblában (Sales.SalesOrderHeader). Ezért a sql:kulcsmezők annotációja nélkül a generált hierarchia pontatlan.

A sql:kulcsmezőkOrder<> beállításon van megadva, az annotáció egyedileg azonosítja a sorokat az övüleben (Sales.SalesOrderHeader tábla), és a gyermekelemei a szülő alatt jelennek meg.

Ez a séma:

<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="OrdCust"  
        parent="Sales.SalesOrderHeader"  
        parent-key="CustomerID"  
        child="Sales.Customer"  
        child-key="CustomerID" />  
  </xsd:appinfo>  
</xsd:annotation>  
  <xsd:element name="Order" sql:relation="Sales.SalesOrderHeader"   
               sql:key-fields="SalesOrderID">  
   <xsd:complexType>  
     <xsd:sequence>  
     <xsd:element name="Customer" sql:relation="Sales.Customer"   
                       sql:relationship="OrdCust"  >  
       <xsd:complexType>  
         <xsd:attribute name="CustID" sql:field="CustomerID" />  
         <xsd:attribute name="SoldBy" sql:field="SalesPersonID" />  
       </xsd:complexType>  
     </xsd:element>  
     </xsd:sequence>  
     <xsd:attribute name="SalesOrderID" type="xsd:integer" />  
     <xsd:attribute name= "CustomerID" type="xsd:string" />  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
Hogy egy működő mintát készítsünk ebből a sémából
  1. Másold le a fenti sémakódot, és illesztsd be egy szövegfájlba. Mentse el a fájlt KeyFields1.xml.

  2. Másold le a következő sablont, és illesztsd be egy szövegfájlba. Mentsd a fájlt KeyFields1T.xml-ként ugyanabba a könyvtárba, ahol KeyFields1.xmlmentetted. Az XPath lekérdezés a sablonban minden <Rendelés> elemet visszaad, amelynek CustomerID-je kevesebb, mint 3.

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

    A leképezési sémához (KeyFields1.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\KeyFields1.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.

Ez a részleges eredményhalmaz:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
    <Order SalesOrderID="43860" CustomerID="1">  
       <Customer CustID="1" SoldBy="280"/>  
    </Order>  
    <Order SalesOrderID="44501" CustomerID="1">  
       <Customer CustID="1" SoldBy="280"/>  
    </Order>  
    <Order SalesOrderID="45283" CustomerID="1">  
       <Customer CustID="1" SoldBy="280"/>  
    </Order>  
    .....  
</ROOT>  

B. A sql:key-mezők megadása, hogy az eredmény megfelelő féskelést hozzon létre

A következő sémában nincs hierarchia sql<:relationship> használatával. A séma továbbra is megköveteli a sql:key-fields annotáció megadását, hogy egyedileg azonosítsuk az alkalmazottakat a HumanResources.Employee táblában.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  <xsd:element name="HumanResources.Employee" sql:key-fields="EmployeeID" >  
   <xsd:complexType>  
     <xsd:sequence>  
        <xsd:element name="Title">  
          <xsd:complexType>  
            <xsd:simpleContent>  
              <xsd:extension base="xsd:string">  
                 <xsd:attribute name="EmployeeID" type="xsd:integer" />  
              </xsd:extension>  
            </xsd:simpleContent>  
          </xsd:complexType>  
        </xsd:element>  
     </xsd:sequence>  
   </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
Hogy egy működő mintát készítsünk ebből a sémából
  1. Másold le a fenti sémakódot, és illesztsd be egy szövegfájlba. Mentse el a fájlt KeyFields2.xml.

  2. Másold le a következő sablont, és illesztsd be egy szövegfájlba. Mentsd a fájlt KeyFields2T.xml-ként ugyanabba a könyvtárba, ahol KeyFields2.xmlmentetted. Az XPath lekérdezés a sablonban az összes <HumanResources.Employee> elemet visszaadja:

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

    A leképezési sémához (KeyFields2.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\KeyFields2.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.

Ez az eredmény:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <HumanResources.Employee>  
    <Title EmployeeID="1">Production Technician - WC60</Title>   
  </HumanResources.Employee>  
  <HumanResources.Employee>  
    <Title EmployeeID="2">Marketing Assistant</Title>   
  </HumanResources.Employee>  
  <HumanResources.Employee>  
    <Title EmployeeID="3">Engineering Manager</Title>   
  </HumanResources.Employee>  
  ...  
</ROOT>