首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TSQL xml.modify用值替换节点的值

TSQL xml.modify用值替换节点的值
EN

Stack Overflow用户
提问于 2015-12-02 02:53:45
回答 2查看 782关注 0票数 1

我需要更新SQL Server列中的XML节点。

我看到了许多使用xpath并使用属性标识节点的示例。

我正在使用的XML是自动生成的,并且没有在我需要的节点上附带属性。我如何构造update语句来使用节点中的另一个值来查找它?

我希望能够写出这样的东西:

代码语言:javascript
复制
declare @xml xml ='
<Content>
<ContentItems>
    <ContentItem>
        <ContentKey>abc</ContentKey>
        <Body>TextToUpdate</Body>
    </ContentItem>
    <ContentItem>
        <ContentKey>efg</ContentKey>
        <Body>Other</Body>
    </ContentItem>
</ContentItems>
</Content>'

select @xml

set @xml.modify(
'
replace value of 
(/content/contentitems[ContentKey="abc"]/body/text())[1]  
with ("Success")')

select @xml
EN

回答 2

Stack Overflow用户

发布于 2015-12-05 11:57:42

你的方向是对的。只有错误的字符大小写,以及XPath中缺少/ContentItem,从而阻止了原始查询的工作。解决这个问题,你就可以开始工作了:

代码语言:javascript
复制
set @xml.modify('
replace value of 
(/Content/ContentItems/ContentItem[ContentKey="abc"]/Body/text())[1]  
with "Success"
')
票数 1
EN

Stack Overflow用户

发布于 2015-12-02 04:23:58

优先: XML区分大小写。因此,您需要确保在XPath中正确调用标记。

Second:看一下这个例子...

代码语言:javascript
复制
set @xml.modify
(
'
    replace value of (/Content/ContentItems/ContentItem/Body/text())[1]  
    with    (
            if (/Content/ContentItems/ContentItem/ContentKey/text() = "abc") then "Success"
            else ""
            )
')

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

https://stackoverflow.com/questions/34027906

复制
相关文章

相似问题

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