首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL Server XML替换属性中的值

SQL Server XML替换属性中的值
EN

Stack Overflow用户
提问于 2019-04-09 23:46:46
回答 2查看 0关注 0票数 0

我想替换XML中的属性中的值。该属性在xml中多次出现。我怎样才能一次性更换这些

我的xml会像下面的内容一样:

代码语言:javascript
复制
 <Example>
  <A>
   <B Type = "x">qqq</B>
   <B Type = "x">www</B>
  </A>
  <C>
   <D Type = "x">aaa</D>
   <D Type = "x">uuu</D>
  </C>
 </Example>

我想用y替换所有x

EN

回答 2

Stack Overflow用户

发布于 2019-04-10 08:04:07

您无法使用(XML DML)的替换值一次替换所有内容。你必须循环完成。

代码语言:javascript
复制
declare @xml xml = '
<Example>
  <A>
   <B Type = "x">qqq</B>
   <B Type = "x">www</B>
  </A>
  <C>
   <D Type = "x">aaa</D>
   <D Type = "x">uuu</D>
  </C>
 </Example>
'

while (select @xml.exist('//*[@Type = "x"]')) = 1
begin
  set @xml.modify('replace value of (//*[@Type = "x"]/@Type)[1] with "y"')
end

select @xml

结果:

代码语言:javascript
复制
<Example>
  <A>
    <B Type="y">qqq</B>
    <B Type="y">www</B>
  </A>
  <C>
    <D Type="y">aaa</D>
    <D Type="y">uuu</D>
  </C>
</Example>

更新

用y替换值x和z:

代码语言:javascript
复制
while (select @xml.exist('//*[@Type = ("x","z")]')) = 1
begin
  set @xml.modify('replace value of (//*[@Type = ("x","z")]/@Type)[1] with "y"')
end

用y替换所有值:

代码语言:javascript
复制
while (select @xml.exist('//*[@Type != "y"]')) = 1
begin
  set @xml.modify('replace value of (//*[@Type != "y"]/@Type)[1] with "y"')
end
票数 0
EN

Stack Overflow用户

发布于 2019-04-10 09:21:10

您可以尝试以下方法。这里ns2zarejestrujStanZgodyAsync是主节点,我已经将idSystemy的值从13更新为38。

代码语言:javascript
复制
UPDATE @t
SET yourXML.modify('replace value of 
(/ns2zarejestrujStanZgodyAsync/rejestrujStanZgody/idSystemy/text())[1] with ("38")')

您可以在此处查看演示 - XML节点更新

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

https://stackoverflow.com/questions/-100006558

复制
相关文章

相似问题

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