Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

XML-Feld ohne Text in T-SQL aktualisieren

Dieser Knoten (/filemeta/description/text())[1] existiert nicht im XML, also gibt es nichts zu ersetzen. Sie müssen stattdessen eine Einfügung vornehmen. Wenn Sie ein Szenario haben, in dem Sie eine Mischung aus leeren Knoten und Knoten mit einem Wert haben, müssen Sie zwei Aktualisierungsanweisungen ausführen.

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

Ergebnis:

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