Sdílet prostřednictvím


Kontextové funkce – pozice (XQuery)

platí pro:SQL Server

Vrátí celočíselnou hodnotu, která označuje pozici kontextové položky v posloupnosti aktuálně zpracovávaných položek.

Syntax

  
fn:position() as xs:integer  

Poznámky

V SQL Serveru lze fn:position() použít pouze v kontextu predikátu závislého na kontextu. Konkrétně lze použít pouze vnitřní závorky ([ ]). Porovnání s touto funkcí nezmenšuje kardinalitu během odvození statického typu.

Příklady

Toto téma obsahuje příklady XQuery pro instance XML, které jsou uloženy v různých xml sloupce typu v databázi AdventureWorks2022.

A. Načtení prvních dvou funkcí produktu pomocí funkce position() XQuery

Následující dotaz načte první dvě funkce, první dva podřízené prvky prvku <Features> z popisu katalogu modelů produktů. Pokud existuje více funkcí, přidá do výsledku prvek <there-is-more/>.

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  

Všimněte si následujících věcí z předchozího dotazu:

  • Klíčové slovo oboru názvů v XQuery Prolog definuje předponu oboru názvů, která se používá v textu dotazu.

  • Tělo dotazu vytvoří XML, který má <Product> element s ProductModelID a ProductModelName atributy a má funkce produktu vrácené jako podřízené prvky.

  • Funkce position() se používá v predikáte k určení pozice prvku <Features> podřízený prvek v kontextu. Pokud se jedná o první nebo druhou funkci, vrátí se.

  • Příkaz KDYŽ přidá do výsledku <je-více/> prvek, pokud je v katalogu produktů více než dvě funkce.

  • Vzhledem k tomu, že ne všechny modely produktů mají popisy katalogu uložené v tabulce, používá se klauzule WHERE k zahození řádků, ve kterých jsou popisy CatalogDescriptions null.

Jedná se o částečný výsledek:

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

Viz také

funkce XQuery proti datového typu XML