我的MSSQL数据库中有一个XML列,其模式类似于:
<Form>
<Version>1000</Version>
<OtherValues />
</Form>我需要手动(通过脚本)将所有行的Version编号更改为1001。通过搜索,我可以推断我将使用.modify XPath函数,但我找到的所有示例都是用于插入节点,而不是编辑节点。
有人能解释一下如何做到这一点吗?
发布于 2011-04-13 23:11:59
数据设置示例:
DECLARE @t TABLE (
Id int
, X xml
)
INSERT @t VALUES ( 1, '
<Form>
<Version>1000</Version>
<OtherValues />
</Form>
'
)
INSERT @t VALUES ( 2, '
<Form>
<Version>1000</Version>
<OtherValues />
</Form>
'
)变更前数据:
SELECT * FROM @t
Id X
----------- ------------------------------------------------------------
1 <Form><Version>1000</Version><OtherValues /></Form>
2 <Form><Version>1000</Version><OtherValues /></Form>数据更新
UPDATE @t
SET X.modify('
replace value of
(/Form/Version[.="1000"]/text())[1]
with
"1001"
')变更后数据:
SELECT * FROM @t
Id X
----------- ------------------------------------------------------------
1 <Form><Version>1001</Version><OtherValues /></Form>
2 <Form><Version>1001</Version><OtherValues /></Form>注意事项:
replace value of要求' to - be -replaced‘表达式标识一个“静态单例”,即解析器必须能够确定它引用了一个单行的值--因此[1].modify修改!因此,如果在一行中有多个XML节点,则必须手动迭代。
https://stackoverflow.com/questions/5651113
复制相似问题