SQL Server XML Заменить значения в атрибуте - PullRequest
1 голос
/ 29 сентября 2011

Я хочу заменить значение в атрибуте в XML. Этот атрибут встречается несколько раз в XML. Как я могу заменить их все сразу

мой xml lools кое-что как показано ниже:

 <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>

Я хочу заменить все x на y

Ответы [ 2 ]

1 голос
/ 29 сентября 2011

Нельзя заменить все сразу, используя заменить значение (XML DML) . Вы должны сделать это в цикле.

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

Результат:

<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>

Обновление

Заменить значения x и z на y:

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

Заменить все значения на y:

while (select @xml.exist('//*[@Type != "y"]')) = 1
begin
  set @xml.modify('replace value of (//*[@Type != "y"]/@Type)[1] with "y"')
end
0 голосов
/ 19 декабря 2018

Вы можете попробовать следующее.Здесь ns2zarejestrujStanZgodyAsync является основным узлом, и я обновил значение idSystemy с 13 до 38.

UPDATE @t
SET yourXML.modify('replace value of 
(/ns2zarejestrujStanZgodyAsync/rejestrujStanZgody/idSystemy/text())[1] with ("38")')

Здесь можно проверить демонстрацию - Обновление узла XML

...