Delen via


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

Zie ook

XQuery-functies op basis van het xml-gegevenstype