Megosztás:


Elérésiút-kifejezések – Rövidített szintaxis használata

A következőkre vonatkozik:SQL Server

Az Elérésiút-kifejezések (XQuery) összes példája az elérési utak kifejezéseinek nem megfelelő szintaxisát használja. Az elérésiút-kifejezés tengelylépéseinek nem megfelelő szintaxisa tartalmazza a tengely nevét és a csomóponttesztet, kettős kettősponttal elválasztva, majd nulla vagy több lépés-minősítővel.

Például:

child::ProductDescription[attribute::ProductModelID=19]

Az XQuery a következő rövidítéseket támogatja az elérésiút-kifejezésekben való használathoz:

  • A child tengely az alapértelmezett tengely. Ezért a child:: tengely kihagyható egy kifejezés egy lépéséből. A /child::ProductDescription/child::Summary például /ProductDescription/Summaryírva.

  • A attribute tengelyek rövidítése @. A /child::ProductDescription[attribute::ProductModelID=10] például /ProductDescription[@ProductModelID=10]írva.

  • A /descendant-or-self::node()/ rövidítése lehet //. A /descendant-or-self::node()/child::act:telephoneNumber például //act:telephoneNumberírva.

    Az előző lekérdezés lekéri a Névjegy tábla AdditionalContactInfo oszlopában tárolt összes telefonszámot. Az AdditionalContactInfo sémája úgy van definiálva, hogy egy <telephoneNumber> elem bárhol megjelenhet a dokumentumban. Ezért az összes telefonszám lekéréséhez a dokumentum minden csomópontjában keresnie kell. A keresés a dokumentum gyökerénél kezdődik, és az összes leszármazott csomóponton folytatódik.

    Az alábbi lekérdezés lekéri egy adott ügyfél kapcsolattartó összes telefonszámát:

    SELECT AdditionalContactInfo.query('
                    declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes";
                    declare namespace crm="https://schemas.adventure-works.com/Contact/Record";
                    declare namespace ci="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo";
                    /descendant-or-self::node()/child::act:telephoneNumber
                    ') AS result
    FROM Person.Contact
    WHERE ContactID = 1;
    

    Ha az elérési út kifejezést a rövidített szintaxisra cseréli, //act:telephoneNumber, ugyanazokat az eredményeket kapja.

  • A self::node() lépésben szereplő érték egyetlen pontra (.) rövidíthető. A pont azonban nem egyenértékű vagy felcserélhető a self::node().

    A következő lekérdezésben például a pont használata nem csomópontot, hanem értéket jelöl:

    ("abc", "cde")[. > "b"]
    
  • A parent::node() lépésben szereplő érték rövidítése dupla pont (..).