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

Menemukan urutan simpul dalam dokumen XML di SQL Server

Anda dapat meniru position() fungsi dengan menghitung jumlah node saudara sebelum setiap node:

SELECT
    code = value.value('@code', 'int'),
    parent_code = value.value('../@code', 'int'),
    ord = value.value('for $i in . return count(../*[. << $i]) + 1', 'int')
FROM @Xml.nodes('//value') AS T(value)

Berikut adalah kumpulan hasil:

code   parent_code  ord
----   -----------  ---
1      NULL         1
11     1            1
111    11           1
12     1            2
121    12           1
1211   121          1
1212   121          2

Cara kerjanya:

  • for $i in . klausa mendefinisikan variabel bernama $i yang berisi simpul saat ini (. ). Ini pada dasarnya adalah peretasan untuk mengatasi kekurangan XQuery dari current() seperti XSLT fungsi.
  • ../* ekspresi memilih semua saudara (anak dari orang tua) dari simpul saat ini.
  • [. << $i] predikat menyaring daftar saudara dengan yang mendahului (<< ) simpul saat ini ($i ).
  • Kami count() jumlah saudara sebelumnya dan kemudian tambahkan 1 untuk mendapatkan posisi. Dengan cara itu node pertama (yang tidak memiliki saudara kandung sebelumnya) diberi posisi 1.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Putar menggunakan SQL Server 2000

  2. Menghasilkan kode sql secara terprogram

  3. ExecuteNonQuery:Properti koneksi belum diinisialisasi.

  4. Panduan:Menyiapkan Ketersediaan Tinggi SQL Server

  5. Cari Tahu apakah Objek adalah Tabel Buatan Pengguna di SQL Server dengan OBJECTPROPERTY()