共用方式為


路徑運算式 - 使用縮寫語法

適用於:SQL Server

瞭解 XQuery 中路徑運算式的所有範例 ,都會針對路徑運算式使用未細分的語法。 路徑運算式中座標軸步驟的未區分語法包括座標軸名稱和節點測試,並以雙冒號分隔,後面接著零個或多個步驟限定詞。

例如:

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

XQuery 支援下列縮寫,以用於路徑運算式:

  • 軸是預設座標軸。 因此, 您可以從運算式中的步驟省略 child:: 軸。 例如, /child::ProductDescription/child::Summary 可以撰寫為 /ProductDescription/Summary

  • 屬性 軸可以縮寫為 @。 例如, /child::ProductDescription[attribute::ProductModelID=10] 可以撰寫為 /ProudctDescription[@ProductModelID=10]

  • /descendant-or-self::node()/ 可以縮寫為 //。 例如, /descendant-or-self::node()/child::act:telephoneNumber 可以撰寫為 //act:telephoneNumber

    上一個查詢會擷取連絡人資料表中 AdditionalContactInfo 資料行中儲存的所有電話號碼。 AdditionalContactInfo 的架構是以 telephoneNumber > 元素可在檔中任何位置出現的方式 < 定義。 因此,若要擷取所有電話號碼,您必須搜尋檔中的每個節點。 搜尋會從檔的根目錄開始,並繼續進行所有子代節點。

    下列查詢會擷取特定客戶連絡人的所有電話號碼:

    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             
    

    如果您將路徑運算式取代為縮寫語法, //act:telephoneNumber 您會收到相同的結果。

  • 步驟 中的 self::node() 可以縮寫為單一點 (.. )。 不過,點與 self::node() 不相等或可 互換。

    例如,在下列查詢中,點的使用代表值,而不是節點:

    ("abc", "cde")[. > "b"]  
    
  • 步驟 中的 parent::node() 可以縮寫為雙點 (..)。