Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cập nhật trường XML không có văn bản trong T-SQL

Nút này (/filemeta/description/text())[1] không tồn tại trong XML nên không có gì để thay thế. Thay vào đó, bạn phải thực hiện một đoạn chèn. Nếu bạn gặp tình huống trong đó bạn có sự kết hợp của các nút trống và các nút với một giá trị, bạn phải chạy hai câu lệnh cập nhật.

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

Kết quả:

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. SQL Server - Tăng tự động cho phép các câu lệnh CẬP NHẬT

  2. Truy vấn SQL để nhóm các kết quả dựa trên trình tự

  3. Ngăn chặn SQL Injection trong ASP.Net

  4. Làm cách nào để viết tên cột có dấu chấm (.) Trong mệnh đề SELECT?

  5. Sử dụng sys.trigger_event_types để liệt kê các loại sự kiện kích hoạt trong SQL Server