共用方式為


Context Functions - position (XQuery)

適用於:SQL Server

傳回整數值,指出內容專案在目前正在處理的專案序列中的位置。

語法

  
fn:position() as xs:integer  

備註

在 SQL Server 中, fn:position() 只能在內容相依述詞的內容中使用。 具體來說,它只能在括弧 ([ ]) 內使用。與這個函式比較並不會減少靜態類型推斷期間的基數。

範例

本主題針對儲存在資料庫中各種 xml 類型數據行中的 AdventureWorks2022 XML 實例,提供 XQuery 範例。

A. 使用 position() XQuery 函式來擷取前兩個產品功能

下列查詢會從產品模型類別目錄描述擷取前兩個特徵,也就是元素的前兩個 <Features> 子元素。 如果有更多功能,它會將元素新增 <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  

請注意下列項目是從上一個查詢而來:

  • XQuery Prolog 中的 namespace 關鍵詞會定義查詢主體中使用的命名空間前置詞。

  • 查詢主體會建構具有 <ProductModelIDProductModelName 屬性之 Product> 元素的 XML,並傳回產品功能做為子元素。

  • position() 函式用於述詞中,以判斷Features>子元素在內容中的位置<。 如果它是第一個或第二個功能,則會傳回它。

  • 如果產品目錄中有兩個 <以上的功能,IF 語句會將 there-is-more/> 元素新增至結果。

  • 由於並非所有產品模型都會將其目錄描述儲存在數據表中,因此 WHERE 子句會用來捨棄 CatalogDescriptions 為 NULL 的數據列。

這是部分結果:

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

另請參閱

針對 xml 資料類型的 XQuery 函式