Как обновить значение всех атрибутов xml в переменной xml с помощью t-sql? - PullRequest
0 голосов
/ 18 марта 2011

Давайте попробуем фрагмент кода

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;

Мы можем обновлять один атрибут за раз, как показано здесь . Новый вопрос: как мы можем обновить все вхождения атрибута abb?

Пожалуйста, помогите.

1 Ответ

3 голосов
/ 18 марта 2011

Вы можете разделить 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(''))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...