SQL Server XQuery - 修改已关闭元素的文本



我在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 元素设置文本? 是否可以"关闭"元素?

您不能插入这样的值,因为您正在尝试替换文本,但没有要替换的文本,因此它将执行但不起作用。

这似乎与您在这里遇到的问题相同。

感谢@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

最新更新