SQL Server XML Replace values in attribute

后端 未结 2 1311
Happy的楠姐
Happy的楠姐 2020-12-21 23:54

I want to replace the value in an attribute in a XML. This attribute comes multiple times in the xml. How can i replace these all at once

my xml lools some what like

相关标签:
2条回答
  • 2020-12-22 00:17

    You can not replace all at once using replace value of (XML DML). You have to do it in a loop.

    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
    

    Result:

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

    Update

    Replace values x and z with y:

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

    Replace all values with y:

    while (select @xml.exist('//*[@Type != "y"]')) = 1
    begin
      set @xml.modify('replace value of (//*[@Type != "y"]/@Type)[1] with "y"')
    end
    
    0 讨论(0)
  • 2020-12-22 00:17

    You can try the following. Here ns2zarejestrujStanZgodyAsync is main node and I have updated the value of idSystemy from 13 to 38.

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

    You can check for demo here- XML Node Update

    0 讨论(0)
提交回复
热议问题