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

SQL Server 2012:Data XML hierarkis - karakter pelarian

Masalah Anda:

  1. Anda mencoba menggunakan keluaran SelectChild , yang bertipe XML, sebagai konten dari atribut @ListDirectChildren . Anda tidak dapat menggunakan XML di tempat ini, oleh karena itu ditangani (dan diloloskan) sebagai teks biasa. Apakah Anda mencoba membuat semacam daftar turunan rekursif?

  2. Dalam kueri luar Anda, Anda melemparkan XML ke VARCHAR(MAX) (btw:selalu gunakan NVARCHAR sehubungan dengan XML). Sekali lagi Anda akan memaksa mesin untuk memperlakukan teks ini sebagai teks dan karenanya menghindarinya.

  3. Anda mencoba menambahkan string "null" untuk mengekspresikan nilai yang hilang. Tetapi XML bekerja secara berbeda:a. Elemen tidak ada dalam XML sepenuhnya:Memintanya akan mengembalikan NULL , tidak apa-apa.

    b. Untuk beberapa aturan, Elemen harus ada, tetapi harus kosong:
    <ListDirectChildren></ListDirectChildren> atau <ListDirectChildren /> (yang artinya sama persis). Buat kueri text() node node dan Anda mendapatkan NULL , tidak apa-apa juga.

    c. Untuk beberapa aturan, Anda ingin menandai elemen sebagai NULL . Gunakan XSINIL

Coba ini untuk variasi empty dan null :

DECLARE @x XML=
'<root>
   <testempty1 />
   <testempty2></testempty2>
 </root>';

SELECT @x.value('(/root/testempty1)[1]','nvarchar(max)') AS testempty1_Content
      ,@x.value('(/root/testempty1/text())[1]','nvarchar(max)') AS testempty1_Text
      ,@x.value('(/root/testempty2)[1]','nvarchar(max)') AS testempty2_Content
      ,@x.value('(/root/testempty2/text())[1]','nvarchar(max)') AS testempty2_Text
      ,@x.value('(/root/NotExistingElement)[1]','nvarchar(max)') AS NotExistingElement_Content
      ,@x.value('(/root/NotExistingElement/text())[1]','nvarchar(max)') AS NotExistingElement_Text

Hasilnya:

                   Content  Text
testempty1         ""       NULL
testempty2         ""       NULL
NotExistingElement NULL     NULL

Coba ini untuk XSINIL

SELECT NULL AS test FOR XML RAW, ELEMENTS XSINIL

untuk mendapatkan ini

<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <test xsi:nil="true" />
</row>

Saran saya:

Pertanyaan ini

semoga terpecahkan. Silakan mulai pertanyaan baru di mana Anda menambahkan lebih banyak data ke skenario sampel Anda untuk mencerminkan banyak anak, tempatkan tautan ke pertanyaan ini dan nyatakan keluaran yang diharapkan (seperti apa tampilan XML).




  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 cara memilih nilai atribut xsi:type di SQL Server?

  2. Bagaimana cara menghitung perbedaan jam (desimal) antara dua tanggal di SQL Server?

  3. SQL Server Inner Join Basics with Contoh

  4. SNIReadSync mengeksekusi antara 120-500 md untuk kueri sederhana. Apa yang saya cari?

  5. SQL Server 2012:jumlah pesanan dengan memberikan kesalahan Sintaks salah di dekat 'pesanan'