Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

XPath untuk mengambil nilai SQL XML

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"]') 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana DB_NAME() Bekerja di SQL Server

  2. Saat menggunakan GETDATE() di banyak tempat, apakah lebih baik menggunakan variabel?

  3. Ubah 'smalldatetime' menjadi 'datetime2' di SQL Server (Contoh T-SQL)

  4. Cara menggunakan SignalR di webfarm, menggunakan server Sql sebagai backplane

  5. Menonaktifkan batasan kunci asing, masih tidak dapat memotong tabel? (SQLServer 2005)