使用XML-DML从SQL查询编辑XML

时间:2011-04-13 14:44:59

标签: sql-server xml xml-dml

我的MSSQL数据库中有一个XML列,其架构类似于:

<Form>
   <Version>1000</Version>
   <OtherValues />
</Form>

我需要手动将所有行的Version数字(通过脚本)更改为1001.在搜索时,我可以推断出我将使用.modify XPath函数,但所有示例我发现已经插入节点,而不是编辑它们。

有人可以说明如何做到这一点吗?

1 个答案:

答案 0 :(得分:5)

示例数据设置:

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要求'待替换'表达式标识“静态单例”,即解析器必须能够计算出它指的是单个值 - 因此[1]
  • .modify只会修改一个节点(每行)!因此,如果您在一行中有多个XML节点,则必须手动迭代