Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Atualizar campo XML sem texto em T-SQL


Este nó (/filemeta/description/text())[1] não existe no XML, então não há nada para substituir. Você tem que fazer uma inserção em vez disso. Se você tiver um cenário em que você tem uma mistura de nós vazios e nós com um valor, você precisa executar duas instruções de atualização.
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

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