Aracılığıyla paylaş


Bağlam Fonksiyonları - konum (XQuery)

Şunlar için geçerlidir: SQL Server

İşlenen öğeler dizisinde bağlam öğesinin konumunu gösteren bir tam sayı değeri döndürür.

Sözdizimi

  
fn:position() as xs:integer  

Açıklamalar

SQL Server'da, fn:position() yalnızca bağlama bağlı bir önlem bağlamında kullanılabilir. Özellikle, yalnızca parantez içinde kullanılabilir ([ ]). Bu fonksiyonla karşılaştırmak, statik tip çıkarımı sırasında kardinaliteyi azaltmaz.

Örnekler

Bu konu, veritabanındaki çeşitli xml türü sütunlarında AdventureWorks2025 depolanan XML örneklerine karşı XQuery örnekleri sağlar.

A. konum() XQuery fonksiyonunun ilk iki ürün özelliğini geri almak için kullanılması

Aşağıdaki sorgu, ürün modeli kataloğu açıklamasından elemanın ilk iki özelliğini, yani ilk iki alt elemanı <Features> alır. Daha fazla özellik varsa, sonuca bir <there-is-more/> unsur ekliyor.

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  

Önceki sorgudan aşağıdakilere dikkat edin:

  • XQuery Prolog'dakiisim alanı anahtar kelimesi, sorgu gövdesinde kullanılan bir namespace önekini tanımlar.

  • Sorgu gövdesi, ProductModelID ve ProductModelName özelliklerine sahip bir <Ürün> öğesi olan ve ürün özelliklerinin alt öğe olarak döndürüldüğü XML oluşturur.

  • Pozisyon() fonksiyonu, önlemde Özellikler> alt öğesinin <bağlamdaki konumunu belirlemek için kullanılır. Eğer birinci veya ikinci filmse, geri verilir.

  • IF ifadesi, ürün kataloğunda ikiden fazla özellik varsa sonuca 'there-is-more/> öğesi ekler<.

  • Tüm ürün modellerinin katalog açıklamaları tabloda saklanmadığı için, WHERE cümlesi CatalogDescriptions'ın NULL olduğu satırları atmak için kullanılır.

Bu kısmi bir sonuçdur:

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

Ayrıca Bkz.

Xml Veri Türüne Karşı XQuery İşlevleri