Partilhar via


Expressões de caminho - Usando sintaxe abreviada

Aplica-se a:SQL Server

Todos os exemplos em expressões de caminho (XQuery) usam sintaxe não abreviada para expressões de caminho. A sintaxe não abreviada para uma etapa de eixo em uma expressão de caminho inclui o nome do eixo e o teste de nó, separados por dois pontos duplos e seguidos por zero ou mais qualificadores de etapa.

Por exemplo:

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

XQuery suporta as seguintes abreviaturas para uso em expressões de caminho:

  • O child eixo é o eixo padrão. Portanto, o child:: eixo pode ser omitido de uma etapa em uma expressão. Por exemplo, /child::ProductDescription/child::Summary pode ser escrito como /ProductDescription/Summary.

  • Um attribute eixo pode ser abreviado como @. Por exemplo, /child::ProductDescription[attribute::ProductModelID=10] pode ser escrito como /ProductDescription[@ProductModelID=10].

  • A /descendant-or-self::node()/ pode ser abreviado como //. Por exemplo, /descendant-or-self::node()/child::act:telephoneNumber pode ser escrito como //act:telephoneNumber.

    A consulta anterior recupera todos os números de telefone armazenados na coluna AdditionalContactInfo na tabela Contato. O esquema para AdditionalContactInfo é definido de forma que um elemento <phoneNumber> possa aparecer em qualquer lugar do documento. Portanto, para recuperar todos os números de telefone, você deve pesquisar cada nó no documento. A pesquisa começa na raiz do documento e continua através de todos os nós descendentes.

    A consulta a seguir recupera todos os números de telefone de um contato de cliente específico:

    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;
    

    Se você substituir a expressão de caminho pela sintaxe abreviada, //act:telephoneNumber, receberá os mesmos resultados.

  • O self::node() em uma etapa pode ser abreviado para um único ponto (.). No entanto, o ponto não é equivalente ou intercambiável com o self::node().

    Por exemplo, na consulta a seguir, o uso de um ponto representa um valor e não um nó:

    ("abc", "cde")[. > "b"]
    
  • O parent::node() passo in a pode ser abreviado para um ponto duplo (..).