Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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