- XQuery Terhadap Jenis Data xml
- Kasus Penggunaan XQuery Umum
- XQueries Melibatkan Hirarki
-
Apa saja di blog Michael Rys
Perbarui
Rekomendasi saya adalah merobek XML ke dalam relasi dan melakukan pencarian dan bergabung pada relasi yang dihasilkan, dengan cara yang berorientasi pada kumpulan, daripada mode prosedural untuk mencari node tertentu dalam XML. Berikut ini adalah kueri XML sederhana yang memisahkan simpul dan atribut yang diinginkan:
select x.value(N'../../../../@stepId', N'int') as StepID
, x.value(N'../../@id', N'int') as ComponentID
, x.value(N'@nom',N'nvarchar(100)') as Nom
, x.value(N'@valeur', N'nvarchar(100)') as Valeur
from @x.nodes(N'/xml/box/components/component/variables/variable') t(x)
Namun, jika Anda harus menggunakan XPath yang mengambil dengan tepat nilai yang diinginkan:
select x.value(N'@valeur', N'nvarchar(100)') as Valeur
from @x.nodes(N'/xml/box[@stepId=sql:variable("@stepID")]/
components/component[@id = sql:variable("@componentID")]/
variables/variable[@nom="Enabled"]') t(x)
Jika stepID dan ID komponen adalah kolom, bukan variabel, Anda harus menggunakan sql:column() alih-alih sql:variabel di filter XPath. Lihat Mengikat Data Relasional Di Dalam Data XML .
Dan akhirnya jika yang Anda butuhkan hanyalah memeriksa keberadaannya, Anda dapat menggunakan ada( ) Metode XML:
select @x.exist(
N'/xml/box[@stepId=sql:variable("@stepID")]/
components/component[@id = sql:variable("@componentID")]/
variables/variable[@nom="Enabled" and @valeur="Yes"]')