是否可以用 SQL DML 替换整个节点?

Is it possible to replace an entire node with SQL DML?

我是 SQL DML 的新手,如果可行,我可以使用任何帮助来辨别。

declare @xml XML, @id int, @new XML
SET @id = 2
SET @xml = '<root><node ids=1><child /></node><node ids=2><child /></node></root>'
SET @new = '<node ids=2,3><child /></node>'

我想将根之外的整个节点元素设置为与@new 相同,但我无法弄清楚 SQL DML 的语法。我知道以下内容由于某些原因不起作用,但认为它几乎是我尝试执行的功能的伪代码。

SET @xml.modify('replace value of (/root/node[@id=sql:variable("@id")]) with sql:variable(@new)')

我的语法错误可能比我意识到的要多,因为我还不熟悉这些东西。我知道它希望我为未类型化的值指定 /text(),但我也想替换包装 "node" 标记,并且它应该在第一个之后使用 [1]。处理这种调用的正确语法是什么?

您可以 delete node 子元素然后插入新的 node 元素

SET @xml.modify(' delete (/root/node)');
SET @xml.modify('insert  sql:variable("@new") into (/root)[1]  ')