SQL Server XQuery - 修改已关闭元素

时间:2016-05-16 13:10:37

标签: sql-server xml xquery-sql

我在SQL Server 2005中有一个XML列,其中包含以下简化的XML。

+----------+------------------+
| RecordID | ValueXML         |
+----------+------------------+
| 1        | <value>x</value> |
|          |                  |
+----------+------------------+

如果我想将该值更改为y,请使用以下SQL语句。

update ValueTable
set ValueXML.modify('
    replace value of (/value/text())[1]
    with ("y")')
where RecordID = 1

工作正常。 x变为y。如果value设置为空,则会出现问题。

update ValueTable
set ValueXML.modify('
    replace value of (/value/text())[1]
    with ("")')
where RecordID = 1

一旦发生这种情况,表格就像这样。

+----------+------------------+
| RecordID | ValueXML         |
+----------+------------------+
| 1        | <value />        |
|          |                  |
+----------+------------------+

现在,我无法再设置该值。替换值查询成功执行,但不做任何更改。

如何设置已关闭的XML元素的文本?是否可以“取消”元素?

2 个答案:

答案 0 :(得分:2)

您无法插入类似的值,因为您尝试替换文本但没有要替换的文本,因此它会执行但不起作用。

这似乎与您拥有here的问题相同。

答案 1 :(得分:2)

感谢@BoogaWooga指出我正确的方向。我能够在两个陈述中进行替换。

首先,我确保元素已关闭。无论元素是否关闭,此语句都有效。

update ValueTable
set ValueXML.modify('
    replace value of (/value/text())[1]
    with ("")')
where RecordID = 1

现在我知道元素已关闭,我使用insert text将值插入封闭元素。

update ValueTable
set ValueXML.modify('
    insert text{"x"}
    into (/value[1])')
where RecordID = 1