Kontextfunktionen – position (XQuery)

Gilt für:SQL Server

Gibt einen ganzzahligen Wert zurück, der die Position des Kontextelements in der Sequenz der Elemente angibt, die derzeit verarbeitet werden.

Syntax

  
fn:position() as xs:integer  

Bemerkungen

In SQL Server kann fn:position() nur im Kontext eines kontextabhängigen Prädikats verwendet werden. Die Funktion kann insbesondere nur innerhalb von eckigen Klammern ([ ]) verwendet werden. Das Vergleichen mit dieser Funktion verringert nicht die Kardinalität während des statischen Typrückschlusses.

Beispiele

Dieses Thema enthält XQuery-Beispiele für XML-Instanzen, die in verschiedenen Xml-Typspalten in der AdventureWorks2022 Datenbank gespeichert sind.

A. Abrufen der ersten beiden Produktfunktionen mit der XQuery-Funktion position()

Die folgende Abfrage ruft die ersten beiden Features( die ersten beiden untergeordneten Elemente des <Features> Elements) aus der Beschreibung des Produktmodellkatalogs ab. Wenn weitere Features vorhanden sind, wird dem Ergebnis ein <there-is-more/> -Element hinzugefügt.

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  

Beachten Sie hinsichtlich der vorherigen Abfrage Folgendes:

  • Der Namespace Schlüsselwort (keyword) im XQuery Prolog definiert ein Namespacepräfix, das im Abfragetext verwendet wird.

  • Der Abfragetext erstellt XML, das über ein <Product-Element> mit den Attributen ProductModelID und ProductModelName verfügt und Produktfeatures enthält, die als untergeordnete Elemente zurückgegeben werden.

  • Die position() -Funktion wird im Prädikat verwendet, um die Position des <untergeordneten Features-Elements> im Kontext zu bestimmen. Wenn es sich dabei um die erste oder zweite Funktion handelt, wird diese zurückgegeben.

  • Die IF-Anweisung fügt dem Ergebnis ein <There-is-more/> -Element hinzu, wenn mehr als zwei Features im Produktkatalog vorhanden sind.

  • Da nicht für alle Produktmodelle Katalogbeschreibungen in der Tabelle gespeichert sind, wird die WHERE-Klausel zum Verwerfen von Zeilen verwendet, in denen CatalogDescriptions den Wert NULL besitzt.

Dies ist ein Teilergebnis:

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

Weitere Informationen

XQuery-Funktionen für den xml-Datentyp