sql >> Databáze >  >> RDS >> Sqlserver

Aktualizujte pole XML bez textu v T-SQL

Tento uzel (/filemeta/description/text())[1] v XML neexistuje, takže není co nahrazovat. Místo toho musíte udělat vložku. Pokud máte scénář, kde máte mix prázdných uzlů a uzlů s hodnotou, musíte spustit dva příkazy aktualizace.

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

Výsledek:

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


  1. Je dobrý nápad používat MySQL a Neo4j společně?

  2. Analyzujte řetězec XML uložený v tabulce Oracle

  3. Definujte VIEW v Oracle bez použití CREATE

  4. Je zaručeno zachování objednávky v dílčím dotazu?