Umieść funkcji (XQuery)
Zwraca wartość całkowitą, która wskazuje położenie element kontekstu w kolejności elementów aktualnie przetwarzane.
Składnia
fn:position() as xs:integer
Uwagi
W SQL Server, fn:position() mogą być używane tylko w kontekście predykat zależne od kontekstu.W szczególności go należy używać tylko wewnątrz nawiasów kwadratowych ([]).Porównanie przeciwko tej funkcja nie powoduje zmniejszenia Kardynalność podczas wnioskowanie statycznych.
Przykłady
W tym temacie przedstawiono przykłady XQuery przeciwko wystąpień XML, które są przechowywane w różnych xml Wpisz kolumn w AdventureWorks2008R2 bazy danych.Przegląd tych kolumn, zobacz XML reprezentacji typu danych w bazie danych AdventureWorks2008R2.
A.Używanie position() funkcja XQuery do pobierania pierwszej funkcje produktu
Następująca kwerenda pobiera pierwsze dwie funkcje pierwsze dwa elementy podrzędność <Features> element z Opis wykazu modelu produktu.Jeśli istnieje więcej funkcji, dodaje on <there-is-more/> element do wyników.
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;
Poniższe z poprzedniej kwerendy:
Nazw słowo kluczowe w XQuery prologu definiuje prefiks obszaru nazw, który jest używany w treści kwerendy.
Treść kwerendy konstrukcje XML, który ma <produktu> element z ProductModelID i ProductModelName atrybuty i został zwrócony jako elementy podrzędność funkcji produktu.
Position() funkcja jest używana w predykacie, aby ustalić położenie <funkcje> element podrzędność w kontekście.Jeśli funkcja pierwszym lub drugim, jest zwracana.
Dodaje instrukcja Jeżeli <tam jest więcej /> element do wyniku, jeśli istnieje więcej niż dwie funkcje w katalogu produktów.
Ponieważ nie wszystkie modele produktów ich opisy katalogu przechowywane w tabela, klauzula WHERE jest używana do odrzucić wierszy, gdzie CatalogDescriptions jest ZEROWY.
Jest to wynik częściowy:
<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 Adventure Works retail store.</p2:Description>
</p2:Maintenance>
<there-is-more/>
</Product>
…