Umieść funkcja (XQuery)

Zwraca wartość całkowitą, która wskazuje położenie element kontekstu w kolejności elementów aktualnie przetwarzane.

fn:position() as xs:integer

Remarks

W SQL Server, FN:position() można używać tylko w kontekście predykat zależne od kontekstu.W szczególności go może być używana tylko wewnątrz nawiasów kwadratowych ([]) .Comparing wobec tej funkcja nie powoduje zmniejszenia relacja podczas wnioskowanie typu statycznego.

Przykłady

W tym temacie przedstawiono przykłady XQuery przed XML wystąpienia, które są przechowywane w różnych XML kolumny typu AdventureWorks Baza danych. Aby uzyskać ogólne informacje o każdej z tych kolumn zobacz xml Data Type Representation in the AdventureWorks Database.

A.Używanie position() XQuery funkcja do pobierania pierwszej funkcja dwóch produktów

Następująca kwerenda pobiera pierwszych dwóch funkcji, pierwszy elementów podrzędność dwóch <Features> element z katalogu opisu modelu produktu. Jeśli istnieje więcej funkcji, dodaje on <there-is-more/> element do wyniku.

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

Należy uwzględnić następujące z poprzedniej kwerendy:

  • The namespace keyword in the XQuery Prolog defines a namespace prefix that is used in the query body.

  • Treść kwerendy konstrukcji XML, który ma <Produkt> element o ProductModelID and ProductModelName atrybutów i został zwrócony jako elementy podrzędność funkcji produktu.

  • The position() funkcja is used in the predicate to determine the position of the <Features> podrzędność element in context. Jeśli jest to funkcja pierwszym lub drugim, jest ona zwracana.

  • Dodaje instrukcja Jeżeli <dostępne są-to bardziej /> element do wyniku, jeśli nie ma więcej niż dwie funkcje w katalogu produktów.

  • Ponieważ nie wszystkie modele produktu ich opisy katalogu przechowywane w tabela, klauzula WHERE jest używana do odrzucić wierszy, w którym CatalogDescriptions ma wartość NULL.

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 AdventureWorks retail store.</p2:Description>
  </p2:Maintenance>
  <there-is-more/>
</Product> 
…