Compartilhar via


Funções de Contexto – position (XQuery)

Aplica-se a:SQL Server

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

Em SQL Server, fn:position() só pode ser usado 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 XQuery em instâncias XML armazenadas em várias colunas de tipo xml no AdventureWorks2022 banco de dados.

a. Usando a função position() XQuery para recuperar os primeiros dois recursos de produto

A consulta a seguir recupera os dois primeiros recursos, os dois primeiros elementos filho do <Features> elemento, da descrição do catálogo do modelo de produto. Se houver mais recursos, ele adicionará um <there-is-more/> elemento 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:

  • O namespace palavra-chave no Prolog XQuery define um prefixo de namespace usado no corpo da consulta.

  • O corpo da consulta constrói XML que tem um <elemento Product> com atributos ProductModelID e ProductModelName e tem os recursos do 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>maintenance contact available through your dealer or  
                    any AdventureWorks retail store.</p2:Description>  
  </p2:Maintenance>  
  <there-is-more/>  
</Product>   
...  

Consulte Também

Funções XQuery em tipos de dados xml