Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A következőkre vonatkozik:SQL Server
Egy elérésiút-kifejezés tengelylépése a következő összetevőket tartalmazza:
További információ: Path Expressions (XQuery).
Az SQL Server XQuery implementációja a következő tengelylépéseket támogatja:
| Tengely | Leírás |
|---|---|
| gyermek | A környezeti csomópont gyermekeit adja vissza. |
| leszármazott | A környezeti csomópont összes leszármazottját adja vissza. |
| szülő | A környezeti csomópont szülőjének értékét adja vissza. |
| attribútum | A környezeti csomópont attribútumait adja vissza. |
| saját | A környezeti csomópontot adja vissza. |
| leszármazott vagy önkiszolgáló | A környezeti csomópontot és a környezeti csomópont összes leszármazottját adja vissza. |
Ezek a tengelyek a szülőtengely kivételével előre tengelyek. A szülő- tengely fordított tengely, mivel visszafelé keres a dokumentumhierarchiában. A relatív elérési út kifejezés child::ProductDescription/child::Summary például két lépésből áll, és mindegyik lépés egy child tengelyt határoz meg. Az első lépés lekéri a környezeti csomópont <ProductDescription> elemét. Minden <ProductDescription> elemcsomópont esetében a második lépés lekéri a <Összefoglaló> elemcsomópont gyermekeit.
A relatív elérési út kifejezésének (child::root/child::Location/attribute::LocationID) három lépésből áll. Az első két lépés egy child tengelyt, a harmadik lépés pedig a attribute tengelyt adja meg. Amikor a Gyártási.ProductModel táblában a gyártási utasítások XML-dokumentumait hajtja végre, a kifejezés a <gyökér> elem <Hely> elemcsomópontjának LocationID attribútumát adja vissza.
Példák
A jelen témakörben szereplő lekérdezési példák xml típusú oszlopokon vannak megadva az AdventureWorks adatbázisban.
Egy. Gyermektengely megadása
Egy adott termékmodell esetében az alábbi lekérdezés lekéri a <ProductDescription> elemcsomópont <Szolgáltatások> elemcsomópont gyermekeit a Production.ProductModel táblában tárolt termékkatalógus-leírásból.
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/child::PD:ProductDescription/child::PD:Features')
FROM Production.ProductModel
WHERE ProductModelID=19
Jegyezze fel az előző lekérdezésben szereplő következőket:
Az xml adattípus
query()metódusa határozza meg az elérési utat.Az elérési út kifejezésének mindkét lépése egy
childtengelyt és a csomópontok nevét,ProductDescriptionésFeatureshatároz meg csomóponttesztekként. További információ a csomóponttesztekről: Csomópontteszt megadása elérési útkifejezési lépésben.
B. Leszármazott és leszármazó vagy önkiszolgáló tengelyek megadása
Az alábbi példa leszármazó és leszármazott vagy önalázó tengelyeket használ. A jelen példában szereplő lekérdezés egy xml- típusú változóhoz van megadva. Az XML-példány egyszerűbb, így egyszerűen szemléltethető a létrehozott eredmények különbsége.
declare @x xml
set @x='
<a>
<b>text1
<c>text2
<d>text3</d>
</c>
</b>
</a>'
declare @y xml
set @y = @x.query('
/child::a/child::b
')
select @y
A következő eredményben a kifejezés a <a> elemcsomópont <b> elemcsomópont gyermekét adja vissza:
<b>text1
<c>text2
<d>text3</d>
</c>
</b>
Ebben a kifejezésben, ha egy leszármazott tengelyt ad meg az elérési út kifejezéséhez,
/child::a/child::b/descendant::*a <b> elemcsomópont összes leszármazottját kéri.
A csomópontteszt csillaga (*) csomóponttesztként jelöli a csomópont nevét. Ezért a leszármazott tengely elsődleges csomóponttípusa, az elemcsomópont határozza meg a visszaadott csomóponttípusokat. Ez azt jelzi, hogy a kifejezés az összes elemcsomópontot visszaadja. A rendszer nem ad vissza szöveges csomópontokat. Az elsődleges csomópont típusával és a csomóponttesztel való kapcsolatával kapcsolatos további információkért lásd: Csomópontteszt megadása az Elérési út kifejezésének lépése témakörben.
A rendszer visszaadja a <c> és a <d> elemcsomópontokat, ahogy az az alábbi eredményben is látható:
<c>text2
<d>text3</d>
</c>
<d>text3</d>
Ha a leszármazó tengely helyett egy leszármazott- vagy öntengelyt ad meg, /child::a/child::b/descendant-or-self::* a környezeti csomópontot, a <b>elemet és annak leszármazottját adja vissza.
Ez az eredmény:
<b>text1
<c>text2
<d>text3</d>
</c>
</b>
<c>text2
<d>text3</d>
</c>
<d>text3</d>
A AdventureWorks-adatbázishoz tartozó alábbi minta lekérdezés lekéri a <ProductDescription> elem gyermekelemének <Features> elemének összes leszármazottelem-csomópontját:
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/child::PD:ProductDescription/child::PD:Features/descendant::*
')
FROM Production.ProductModel
WHERE ProductModelID=19
C. Szülőtengely megadása
Az alábbi lekérdezés a Production.ProductModel táblában tárolt termékkatalógus XML-dokumentumának <ProductDescription> elemének <Summary> elemét adja vissza.
Ez a példa a szülőtengely használatával tér vissza a <Feature> elem szülőjének, és lekéri a <ProductDescription> elem <Summary> elemének gyermekét.
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/child::PD:ProductDescription/child::PD:Features/parent::PD:ProductDescription/child::PD:Summary
')
FROM Production.ProductModel
WHERE ProductModelID=19
Ebben a lekérdezési példában az elérési út kifejezés a parent tengelyt használja. A kifejezést a szülőtengely nélkül is átírhatja, ahogy az alábbi ábrán látható:
/child::PD:ProductDescription[child::PD:Features]/child::PD:Summary
Az alábbi példában a szülőtengely egy hasznosabb példáját mutatjuk be.
A ProductModel tábla CatalogDescription oszlopában tárolt termékmodell-katalógus leírása tartalmaz egy <ProductDescription> elemet, amely tartalmazza a ProductModelID attribútumot és <Features> gyermekelemet, ahogyan az a következő töredékben látható:
<ProductDescription ProductModelID="..." >
...
<Features>
<Feature1>...</Feature1>
<Feature2>...</Feature2>
...
</ProductDescription>
A lekérdezés egy $fiterátorváltozót állít be az FLWOR utasításban a <Features> elem gyermekeinek visszaadásához. További információ: FLWOR utasítás és iteráció (XQuery). Az return záradék minden egyes funkcióhoz létrehoz egy XML-t az alábbi formában:
<Feature ProductModelID="...">...</Feature>
<Feature ProductModelID="...">...</Feature>
Az egyes <Feature> elemek ProductModelID hozzáadásához a parent tengely van megadva:
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
declare namespace wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain";
for $f in /child::PD:ProductDescription/child::PD:Features/child::*
return
<Feature
ProductModelID="{ ($f/parent::PD:Features/parent::PD:ProductDescription/attribute::ProductModelID)[1]}" >
{ $f }
</Feature>
')
FROM Production.ProductModel
WHERE ProductModelID=19
Ez a részleges eredmény:
<Feature ProductModelID="19">
<wm:Warranty
xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
<wm:WarrantyPeriod>3 years</wm:WarrantyPeriod>
<wm:Description>parts and labor</wm:Description>
</wm:Warranty>
</Feature>
<Feature ProductModelID="19">
<wm:Maintenance
xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
<wm:NoOfYears>10 years</wm:NoOfYears>
<wm:Description>maintenance contract available through your dealer
or any AdventureWorks retail store.</wm:Description>
</wm:Maintenance>
</Feature>
<Feature ProductModelID="19">
<p1:wheel
xmlns:p1="https://www.adventure-works.com/schemas/OtherFeatures">
High performance wheels.
</p1:wheel>
</Feature>
Vegye figyelembe, hogy az elérésiút-kifejezésben szereplő predikátum [1] annak biztosítása érdekében, hogy egy egyenérték legyen visszaadva.