Contextfuncties - positie (XQuery)
van toepassing op:SQL Server-
Retourneert een geheel getal dat de positie aangeeft van het contextitem binnen de reeks items die momenteel worden verwerkt.
Syntaxis
fn:position() as xs:integer
Opmerkingen
In SQL Server kunnen fn:position() alleen worden gebruikt in de context van een contextafhankelijk predicaat. Het kan met name alleen tussen vierkante haken ([ ]) worden gebruikt. Vergeleken met deze functie vermindert de kardinaliteit niet tijdens statische typedeductie.
Voorbeelden
Dit onderwerp bevat XQuery-voorbeelden voor XML-exemplaren die zijn opgeslagen in verschillende xml- typekolommen in de AdventureWorks2022
-database.
Een. De functie position() XQuery gebruiken om de eerste twee productfuncties op te halen
Met de volgende query worden de eerste twee functies, de eerste twee onderliggende elementen van het <Features
>-element, opgehaald uit de beschrijving van de productmodelcatalogus. Als er meer functies zijn, wordt er een <there-is-more/
> element aan het resultaat toegevoegd.
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
Let op het volgende uit de vorige query:
De naamruimte trefwoord in de XQuery Prolog- definieert een naamruimtevoorvoegsel dat wordt gebruikt in de hoofdtekst van de query.
De hoofdtekst van de query bouwt XML met een element <Product> met ProductModelID en ProductModelName kenmerken en bevat productfuncties die als onderliggende elementen worden geretourneerd.
De functie position() wordt gebruikt in het predicaat om de positie van de <Functies> onderliggend element in context te bepalen. Als dit de eerste of tweede functie is, wordt deze geretourneerd.
De IF-instructie voegt een <er-is-meer/> element aan het resultaat toe als er meer dan twee functies in de productcatalogus zijn.
Omdat niet alle productmodellen hun catalogusbeschrijvingen hebben opgeslagen in de tabel, wordt de WHERE-component gebruikt om rijen te verwijderen waarin CatalogDescriptions NULL is.
Dit is een gedeeltelijk resultaat:
<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>
...