我遇到了一些存储在数据库 XML 列中的值的数据问题。我已将问题重现为以下示例:
设置脚本:
create table XMLTest
(
[XML] xml
)
--A row with two duff entries
insert XMLTest values ('
<root>
<item>
<flag>false</flag>
<frac>0.5</frac>
</item>
<item>
<flag>false</flag>
<frac>0</frac>
</item>
<item>
<flag>false</flag>
<frac>0.5</frac>
</item>
<item>
<flag>true</flag>
<frac>0.5</frac>
</item>
</root>
')
在 XML 部分中,不正确的条目是那些具有<flag>false</flag>
并且<frac>0.5</frac>
值flag
应该是true
非零frac
值的条目。
以下 SQL 标识需要更新的 XML 项节点:
select
i.query('.')
from
XMLTest
cross apply xml.nodes('root/item[flag="false" and frac > 0]') x(i)
我想进行更新以更正这些节点,但我看不到如何修改item
由 a 标识的元素cross apply
。我看到更新看起来像这样:
update t
set
x.i.modify('replace value of (flag/text())[1] with "true"')
from
XMLTest t
cross apply xml.nodes('root/item[flag="false" and frac > 0]') x(i)
但是这不起作用:我收到错误“'修改'附近的语法不正确”。
可以通过这种方法完成吗?
我知道另一种方法是在 xml 列上进行字符串替换,但我不喜欢这样有点含糊(而且我不相信它不会破坏我的真实问题)