Condividi tramite


Funzione position (XQuery)

Restituisce un valore integer che indica la posizione dell'elemento di contesto all'interno della sequenza di elementi corrente da elaborare.

Sintassi

fn:position() as xs:integer

Osservazioni

In SQL Server, la funzione fn:position() può essere utilizzata solo nell'ambito di un predicato dipendente dal contesto. In particolare, può essere utilizzata solo tra parentesi ([ ]). I confronti basati su tale funzione non riducono la cardinalità durante l'interferenza dei tipi statici.

Esempi

In questo argomento vengono forniti esempi di utilizzo del linguaggio XQuery sulle istanze XML archiviate in diverse colonne di tipo xml nel database AdventureWorks2008R2. Per una panoramica su ognuna di queste colonne, vedere Rappresentazione del tipo di dati XML nel database AdventureWorks2008R2.

A. Utilizzo della funzione XQuery position() per recuperare le prime due caratteristiche del prodotto

La query seguente recupera le prime due caratteristiche, ovvero i primi due elementi figlio dell'elemento <Features>, dalla descrizione del catalogo prodotti. Se sono disponibili più caratteristiche, viene aggiunto un elemento <there-is-more/> al risultato.

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;

Dalla query precedente si noti quanto segue:

  • La parola chiave namespace nel prologo XQuery definisce un prefisso dello spazio dei nomi nel corpo della query.

  • Il corpo della query costruisce un'istanza XML che include un elemento <Product> con gli attributi ProductModelID e ProductModelName, nonché le caratteristiche del prodotto restituite come elementi figlio.

  • La funzione position() viene utilizzata nel predicato per determinare la posizione dell'elemento figlio <Features> nel contesto. Viene restituita se si tratta della prima o della seconda caratteristica.

  • Se il catalogo prodotti contiene più di due caratteristiche, l'istruzione IF aggiunge un elemento <there-is-more/> al risultato.

  • Poiché non tutte le descrizioni del catalogo dei modelli di prodotto vengono archiviate nella tabella, viene utilizzata la clausola WHERE per scartare le righe in cui CatalogDescriptions è NULL.

Risultato parziale:

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

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

<p1:WarrantyPeriod>3 years</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 Adventure Works retail store.</p2:Description>

</p2:Maintenance>

<there-is-more/>

</Product>

Vedere anche

Riferimento