sql >> Database >  >> RDS >> Sqlserver

Update XML-veld zonder tekst in T-SQL

Dit knooppunt (/filemeta/description/text())[1] bestaat niet in de XML, dus er valt niets te vervangen. In plaats daarvan moet je een insert doen. Als je een scenario hebt waarin je een combinatie van lege knooppunten en knooppunten met een waarde hebt, moet je twee update-instructies uitvoeren.

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

Resultaat:

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


  1. Help bij MySQL-fout:onbekende kolom in aan-clausule

  2. Waarom genereert EF SQL-query's met onnodige null-controles?

  3. python 3.5 - django 1.10 - mysqlclient windows 7 installatiefout

  4. Aankondiging van de algemene beschikbaarheid van SQL Safe Backup 8.7.2