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
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 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 Produktmodellkatalogbeschreibung 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:
Das Namespace-Schlüsselwort im XQuery Prolog definiert ein Namespacepräfix, das im Abfragetext verwendet wird.
Der Abfragetext erstellt XML mit einem <Product-Element mit Den Attributen "ProductModelID>" und "ProductModelName" und enthält Produktfeatures, 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 im Produktkatalog mehr als zwei Features 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 Functions against the xml Data Type (XQuery-Funktionen für den xml-Datentyp)