Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Актуализирайте XML поле без текст в T-SQL

Този възел (/filemeta/description/text())[1] не съществува в XML, така че няма какво да се замени. Вместо това трябва да направите вмъкване. Ако имате сценарий, при който имате комбинация от празни възли и възли със стойност, трябва да изпълните два оператора за актуализиране.

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

Резултат:

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

  2. Как да използвам регулярен израз в sql сървър?

  3. оптимизирайте заявката за най-близък съсед на 70 милиона пространствени облака от точки с изключително висока плътност на SQL Server 2008

  4. Разлика между дата и час в sqlserver?

  5. Докато цикъл в SQL Server 2008 итерация през диапазон от дати и след това INSERT