Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zaktualizuj pole XML bez tekstu w T-SQL

Ten węzeł (/filemeta/description/text())[1] nie istnieje w XML, więc nie ma nic do zastąpienia. Musisz zamiast tego zrobić wstawkę. Jeśli masz scenariusz, w którym masz mieszankę pustych węzłów i węzłów z wartością, musisz uruchomić dwie instrukcje aktualizacji.

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

Wynik:

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. Instrukcja SQL IF jest ignorowana

  2. Połączenie sql czeka 15 sekund pomimo limitu czasu 3 sekund w ciągu połączenia

  3. datetime2 vs smalldatetime w SQL Server:jaka jest różnica?

  4. Zapytanie SQL w wielu bazach danych

  5. Automatyzacja zadań tworzenia kopii zapasowych i konserwacji za pomocą planu konserwacji w SQL Server