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