如何使用t-sql更新xml变量中的所有xml属性的值?

时间:2011-03-18 03:55:47

标签: xml tsql sql-server-2008

我们有一个示例snipet

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的所有时间?

请帮忙。

1 个答案:

答案 0 :(得分:3)

您可以将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(''))