Partilhar via


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 AdventureWorks2012 .

A.Usando a 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 modelo 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>maintenance contact available through your dealer or
                    any AdventureWorks retail store.</p2:Description>
  </p2:Maintenance>
  <there-is-more/>
</Product> 
…

Consulte também

Referência

Funções XQuery em tipos de dados xml