次の方法で共有


パス式 - 省略構文の使用

適用対象:SQL Server

パス式 (XQuery) のすべての例では、パス式に非省略構文を使用します。 パス式の軸ステップの省略構文では、軸名とノード テストを 2 つのコロン (::) で区切り、その後にステップ修飾子を指定します。ステップ修飾子は、指定しなくてもかまいません。

次に例を示します。

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

XQuery は、パス式で次の省略をサポートしています。

  • child軸は既定の軸です。 したがって、式のステップから child:: 軸を省略できます。 たとえば、 /child::ProductDescription/child::Summary/ProductDescription/Summaryとして記述できます。

  • attribute軸は @と省略できます。 たとえば、 /child::ProductDescription[attribute::ProductModelID=10]/ProductDescription[@ProductModelID=10]として記述できます。

  • /descendant-or-self::node()/は 、// と省略できます。 たとえば、 /descendant-or-self::node()/child::act:telephoneNumber//act:telephoneNumberとして記述できます。

    前のクエリでは、Contact テーブルの 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() は、1 つのドット (.) に省略できます。 ただし、ドットは、 self::node()と同等または交換可能ではありません。

    たとえば、次のクエリでは、ドットを使用して、ノードではなく値を表しています。

    ("abc", "cde")[. > "b"]
    
  • ステップの parent::node() は、二重ドット (..) に省略できます。