【问题标题】:How to update all xml attributes' value in an xml variable using t-sql?如何使用 t-sql 更新 xml 变量中的所有 xml 属性值?
【发布时间】:2011-07-17 21:37:27
【问题描述】:
让我们有一个示例片段
DECLARE @xml XML = N'
<a abb="122">
<b>
</b>
</a>
<a abb="344">
<b>
</b>
</a>
...
';
SELECT @xml;
--need to update abb to be 888 in @xml here
SELECT @xml;
我们可以一次更新一个属性,如here 所示。新问题是:我们如何更新属性abb 的所有一次出现?
请帮忙。
【问题讨论】:
标签:
xml
tsql
sql-server-2008
【解决方案1】:
您可以将 XML 拆分为表变量,分别替换每个节点,然后再次组合它们。
declare @xml xml =
'<a abb="122">
<b></b>
</a>
<a abb="344">
<b></b>
</a>'
declare @T table (XMLCol xml)
insert into @T
select
a.query('.')
from @xml.nodes('a') a(a)
update @T set
XMLCol.modify('replace value of (/a/@abb)[1] with 888')
set @xml = (select XMLCol as [*]
from @T
for xml path(''))