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

Meratakan XML hierarkis dalam SQL menggunakan metode node()

Sepertinya saya telah menjawab pertanyaan saya sendiri setelah sedikit melihat-lihat online:

SELECT
    grandparent.gname.value('@name', 'VARCHAR(15)'),
    parent.pname.value('@name', 'VARCHAR(15)'),
    child.cname.value('@name', 'VARCHAR(15)')
FROM
    @xmlFamilyTree.nodes('/grandparent') AS grandparent(gname)
CROSS APPLY
    grandparent.gname.nodes('*') AS parent(pname)
CROSS APPLY
    parent.pname.nodes('children/*') AS child(cname)

Menggunakan CROSS APPLY Saya dapat memilih grandparent tingkat atas node dan gunakan ini untuk memilih anak parent node dan sebagainya. Dengan menggunakan metode ini, saya membuat kueri saya tidak dieksekusi dalam waktu sekitar 1 menit 30 detik turun menjadi sekitar 6 detik .

Menariknya, jika saya menggunakan OPEN XML "lama" metode untuk mengambil data yang sama, kueri dijalankan dalam 1 detik !

Sepertinya Anda mungkin harus mendekati penggunaan kedua teknik ini berdasarkan kasus per kasus, tergantung pada ukuran/kompleksitas dokumen yang diharapkan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Taktik normalisasi SQL Server:varchar vs int Identity

  2. Antarmuka Jaringan SQL, kesalahan:50 - Terjadi kesalahan Runtime Database Lokal. Tidak dapat membuat instans otomatis

  3. Dapatkan Nilai Pengembalian dari prosedur Tersimpan di asp.net

  4. sumProduct di sql

  5. Ubah kolom nomor