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

时间:2015-04-07 18:26:59

标签: sql sql-server sql-server-2008 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(),但是我想要替换包装节点&#34;标签以及之后应该使用[1]的第一个。处理这种调用的正确语法是什么?

1 个答案:

答案 0 :(得分:4)

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

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