Aracılığıyla paylaş


Pozisyon işlev (XQuery)

Şu anda işlenen öğelerin sırası içinde bağlam öğenin konumunu gösteren bir tamsayı döndürür.

Sözdizimi

fn:position() as xs:integer

Açıklamalar

De SQL Server, fn:position() yalnızca içerik bağımlı yüklemi içeriğinde kullanılabilir. Özellikle, o sadece ayraçlar ([]) içinde kullanılabilir.Bu işlev karşı karşılaştırarak önem sırasında statik tür kesmesi azaltmaz.

Örnekler

Bu konu çeşitli depolanan xml örnekleri karşı XQuery örnekler sağlar xml yazın sütunlarında AdventureWorks2012 veritabanı. Bu sütunlar genel bakış için bkz: DEL - xml Data Type Representation in the AdventureWorks2008R2 Database.

A.İlk iki ürün özelliklerini almak için işleçlerle XQuery işlevini kullanma

İlk iki özellikleri, ilk iki alt öğelerini aşağıdaki sorgu alır <Features> öğesinden ürün modeli katalog açıklamasını. Daha fazla özellik varsa vardır, bu ekler bir <there-is-more/> sonucu eleman.

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

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:

  • Ad anahtar kelime XQuery giriş sorgu gövdesi içinde kullanılan bir ad alanı önekini tanımlar.

  • Sorgu gövde içeren bir xml yapıları bir <ürün> öğe ile ProductModelID ve ProductModelName öznitelikleri ve alt öğe döndürülen ürün özellikleri vardır.

  • İşleçlerle işlevi yüklemi konumunu belirlemek için kullanılan <özellikler> alt öğe bağlamında. İlk ya da ikinci özellik ise, döndürülür.

  • IF deyimini ekler bir <orada olduğunu daha /> elemanı ürün kataloğuna ikiden fazla özellikleri varsa sonuç.

  • Katalog açıklamaları tabloda saklanan tüm ürün modellerinde, where yan tümcesi CatalogDescriptions null olduğu satırlar atmak için kullanılır.

Bu kısmi bir sonucudur:

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

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

Başvuru

Xml veri türü karşı XQuery işlevleri