Bagikan melalui


Fungsi Konteks - posisi (XQuery)

Berlaku untuk:SQL Server

Mengembalikan nilai bilangan bulat yang menunjukkan posisi item konteks dalam urutan item yang saat ini sedang diproses.

Sintaks

  
fn:position() as xs:integer  

Keterangan

Di SQL Server, fn:position() hanya dapat digunakan dalam konteks predikat tergantung konteks. Secara khusus, ini hanya dapat digunakan di dalam tanda kurung siku ([ ]). Membandingkan dengan fungsi ini tidak mengurangi kardinalitas selama inferensi jenis statis.

Contoh

Topik ini menyediakan contoh XQuery terhadap instans XML yang disimpan di berbagai kolom jenis xml dalam AdventureWorks2022 database.

J. Menggunakan fungsi position() XQuery untuk mengambil dua fitur produk pertama

Kueri berikut mengambil dua fitur pertama, dua elemen turunan pertama dari <Features> elemen, dari deskripsi katalog model produk. Jika ada lebih banyak fitur, elemen akan ditambahkan <there-is-more/> ke hasilnya.

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  

Perhatikan hal berikut ini dari kueri sebelumnya:

  • Kata kunci namespace di XQuery Prolog menentukan awalan namespace yang digunakan dalam isi kueri.

  • Badan kueri membuat XML yang memiliki <elemen Produk> dengan atribut ProductModelID dan ProductModelName , dan memiliki fitur produk yang dikembalikan sebagai elemen turunan.

  • Fungsi position() digunakan dalam predikat untuk menentukan posisi elemen turunan <Fitur> dalam konteks. Jika ini adalah fitur pertama atau kedua, fitur tersebut dikembalikan.

  • Pernyataan IF menambahkan <elemen there-is-more/> ke hasil jika ada lebih dari dua fitur dalam katalog produk.

  • Karena tidak semua model produk memiliki deskripsi katalog yang disimpan dalam tabel, klausa WHERE digunakan untuk membuang baris di mana CatalogDescriptions adalah NULL.

Ini adalah hasil parsial:

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

Lihat Juga

Fungsi XQuery terhadap Tipe Data xml