TarunShrivastav Ответов: 1

Как удалить несколько узлов из XML-файла в SQL server


Привет,

у меня есть xml, как показано ниже

declare @xml xml = '<my><Fields><Fields_1>1</Fields_1><Fields_2>2</Fields_2><Fields_3>4</Fields_3> </Fields></my>'


Я хочу удалить несколько узлов в одном операторе sql.
т. е. мне нужен sql-запрос, чтобы удалить два узла, скажем, Field_1 и Field_2 динамически.

XML будет окончательным следующим образом:-
'<my><Fields><Fields_3>4</Fields_3> </Fields></my>'


Что я уже пробовал:

Я обнаружил, что это достижимо с помощью

SET @xml.modify('
delete
(
/my/Fields/Fields_1,
/my/Fields/Fields_2
)
')



Однако мое требование состоит в том, чтобы узлы создавались динамически. ,
скажем @node_1 = '
/my/Fields/Fields_1
'
@node_2 = '
/my/Fields/Fields_2
'
и нужно выполнить удаление.

Я хочу создать вышеописанный запрос динамически для удаления нескольких узлов или есть какой-то другой способ достичь этого, например, что-то вроде:-

<pre>SET @xml.modify('
delete
(
@node1,
@node2
)
')

1 Ответов

Рейтинг:
0

Kornfeld Eliyahu Peter

Это и есть способ "удалить":

SET @XML.modify('delete /my/Fields/Fields_1')

Причина в том, что modify нельзя получить переменные только литеральные...
Вы можете создать, конечно, динамический SQL...
sp_executesql (Transact-SQL) | Microsoft Docs[^]


TarunShrivastav

Спасибо,
Не могли бы вы привести пример того, как создать его динамически.

TarunShrivastav

есть ли какая - либо другая альтернатива удаления нескольких узлов без использования modify, чтобы мы могли использовать динамический sql

Kornfeld Eliyahu Peter

Другой способ-выбрать только те узлы, которые вы не хотите удалять, но очевидно, что он также не является динамическим...

TarunShrivastav

но я думаю, что легко сохранить структуру, когда вы используете modify, но можно ли сохранить структуру xml, когда мы выбираем узел, который мы не хотим удалять.