Freigeben über


position-Funktion (XQuery)

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

Syntax

fn:position() as xs:integer

Hinweise

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 stellt XQuery-Beispiele für XML-Instanzen bereit, die in verschiedenen Spalten vom xml -Typ in der AdventureWorks2008R2-Datenbank gespeichert werden. Eine Übersicht über diese Spalten finden Sie unter Darstellung des xml-Datentyps in der AdventureWorks2008R2-Datenbank.

A. Verwenden der position()-Funktion von XQuery zum Abrufen der ersten beiden Produktfeatures

Die folgende Abfrage ruft die beiden ersten Funktionen, die ersten beiden untergeordneten Elemente des <Features>-Elements, aus der Produktmodell-Katalogbeschreibung ab. Wenn mehr Funktionen 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:

  • Das namespace-Schlüsselwort im XQuery-Prolog definiert ein Namespacepräfix , das im Abfragetext verwendet wird.

  • Der Abfragetext erstellt XML, das ein <Product>-Element mit den ProductModelID- und ProductModelName-Attributen besitzt; die Produktfunktionen werden als untergeordnete Elemente zurückgegeben.

  • Die position()-Funktion wird im Prädikat zum Bestimmen der Position des untergeordneten <Features>-Elements im Kontext verwendet. 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 Funktionen 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 das Teilergebnis:

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

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

<p1:WarrantyPeriod>3 Jahre</p1:WarrantyPeriod>

<p1:Description>Teile und Arbeit</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>Informationen zum Ansprechpartner für die Wartung erhalten Sie über Ihren Händler oder

ein AdventureWorks-Einzelhandelsgeschäft.</p2:Description>

</p2:Maintenance>

<there-is-more/>

</Product>