sql >> Databasteknik >  >> RDS >> Sqlserver

Uppdatera XML-fält utan text i T-SQL

Denna nod (/filemeta/description/text())[1] finns inte i XML så det finns inget att ersätta. Du måste göra en insert istället. Om du har ett scenario där du har en blandning av tomma noder och noder med ett värde måste du köra två uppdateringssatser.

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

Resultat:

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


  1. Ta bort rader från mysql-servern från en lista med ID:s C#

  2. Förstå molnbaserad SQL Server-prestandaövervakning

  3. välj distinct count(id) kontra select count(distinct id)

  4. Kör Shell-skript/kommando från MySQL Trigger/Lagrad procedur