1

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

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

而且我需要手动(通过脚本)将所有行的Version编号更改为 1001。搜索后,我可以推断出我将使用.modifyXPath 函数,但我发现的所有示例都是用于插入节点,而不是编辑它们.

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

4

1 回答 1

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要求 'to-be-replaced' 表达式标识一个“静态单例”,即解析器必须能够计算出它引用单个值 - 因此[1]
  • Only one node (per row) will ever be modified by .modify! So if you have multiple XML nodes in a single row, you will have to iterate manually
于 2011-04-13T15:11:58.963 回答