Função position (XQuery)

Retorna um valor inteiro que indica a posição do item de contexto na sequência de itens que estão sendo processados atualmente.

Sintaxe

fn:position() as xs:integer

Comentários

No SQL Server, fn:position () pode ser usado somente no contexto de um predicado dependente de contexto. Especificamente, ele só pode ser usado entre parênteses ([ ]). A comparação contra essa função não reduz a cardinalidade durante a inferência de tipo estática.

Exemplos

Este tópico fornece exemplos de XQuery em instâncias XML armazenadas em várias colunas do tipo xml no banco de dados AdventureWorks2008R2. Para obter uma visão geral de cada uma dessas colunas, consulte Representação de tipo de dados xml no banco de dados do AdventureWorks2008R2.

A. Uso da função position() XQuery para recuperar os primeiros dois recursos de produto

A consulta a seguir recupera os primeiros dois recursos, os primeiros dois elementos filho do elemento <Features>, da descrição do catálogo de modelos de produtos. Se houver mais recursos, ele adicionará um elemento <there-is-more/> ao resultado.

SELECT CatalogDescription.query('
     declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
     <Product> 
          { /pd:ProductDescription/@ProductModelID }
          { /pd:ProductDescription/@ProductModelName } 
          {
            for $f in /pd:ProductDescription/pd:Features/*[position()<=2]
            return
            $f 
          }
          {
            if (count(/pd:ProductDescription/pd:Features/*) > 2)
            then <there-is-more/>
            else ()
          } 
     </Product>        
') as x
FROM Production.ProductModel
WHERE CatalogDescription is not null;

Observe o seguinte na consulta anterior:

  • A palavra-chave namespace no Prólogo do XQuery define um prefixo de namespace usado no corpo da consulta.

  • O corpo da consulta constrói XML com um elemento <Product> com os atributos ProductModelID e ProductModelName e tem recursos de produto retornados como elementos filho.

  • A função position() é usada no predicado para determinar a posição do elemento filho <Features> no contexto. Se ele for o primeiro ou segundo recurso, será retornado.

  • A instrução IF adiciona um elemento <there-is-more/> ao resultado se houver mais de dois recursos no catálogo de produtos.

  • Como nem todos os modelos de produtos têm as descrições de catálogo armazenadas na tabela, a cláusula WHERE é usada para descartar linhas em que CatalogDescriptions é NULL.

Este é um resultado parcial:

<Product ProductModelID="19" ProductModelName="Mountain 100">

<p1:Warranty xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">

<p1:WarrantyPeriod>3 year</p1:WarrantyPeriod>

<p1:Description>parts and labor</p1:Description>

</p1:Warranty>

<p2:Maintenance xmlns:p2="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">

<p2:NoOfYears>10</p2:NoOfYears>

<p2:Description>contato de manutenção disponível pela revenda ou

qualquer varejo Adventure Works.</p2:Description>

</p2:Maintenance>

<there-is-more/>

</Product>

Consulte também

Referência