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

Perbarui bidang XML tanpa teks di T-SQL

Simpul ini (/filemeta/description/text())[1] tidak ada dalam XML sehingga tidak ada yang perlu diganti. Anda harus melakukan penyisipan sebagai gantinya. Jika Anda memiliki skenario di mana Anda memiliki campuran node kosong dan node dengan nilai, Anda harus menjalankan dua pernyataan pembaruan.

declare @filemetaDB table(filemeta xml)

insert into @filemetaDB values
('<filemeta><description>Not empty</description></filemeta>'), -- Not empty node
('<filemeta><description/></filemeta>'),                       -- Empty node
('<filemeta></filemeta>')                                      -- Missing node

-- Replace value for nodes with value
update @filemetaDB
set filemeta.modify('replace value of (/filemeta/description/text())[1] with "TEST 1"')
where filemeta.exist('/filemeta/description/text()') = 1

-- Add text node for empty nodes
update @filemetaDB
set filemeta.modify('insert text{"TEST 2"} into (/filemeta/description)[1]')
where filemeta.exist('/filemeta/description/text()') = 0

select *
from @filemetaDB

Hasil:

filemeta
------------------------------------------------------
<filemeta><description>TEST 1</description></filemeta>
<filemeta><description>TEST 2</description></filemeta>
<filemeta />


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggabungkan Nilai Kolom menjadi Daftar yang Dipisahkan Koma

  2. Kueri SQL yang rumit--menemukan item yang cocok dengan beberapa kunci asing yang berbeda

  3. Cara menggunakan SEMUA Operator Logika di SQL Server - Tutorial SQL Server / TSQL Bagian 126

  4. Buat Server Tertaut di SQL Server (Contoh T-SQL)

  5. Perbarui nilai kolom nol dari nilai bukan nol di baris sebelumnya