首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XML-DML从SQL查询编辑XML

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

Stack Overflow用户
提问于 2011-04-13 22:44:59
回答 1查看 679关注 0票数 1

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

代码语言:javascript
复制
<Form>
   <Version>1000</Version>
   <OtherValues />
</Form>

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

有人能解释一下如何做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-13 23:11:59

数据设置示例:

代码语言:javascript
复制
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>
'
)

变更前数据:

代码语言:javascript
复制
SELECT * FROM @t

Id          X
----------- ------------------------------------------------------------
1           <Form><Version>1000</Version><OtherValues /></Form>
2           <Form><Version>1000</Version><OtherValues /></Form>

数据更新

代码语言:javascript
复制
UPDATE @t
SET X.modify('
replace value of 
    (/Form/Version[.="1000"]/text())[1]
with
    "1001"
')

变更后数据:

代码语言:javascript
复制
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节点(每行)将会被.modify修改!因此,如果在一行中有多个XML节点,则必须手动迭代

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5651113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档