【问题标题】:SQL XML Replacing elementsSQL XML 替换元素
【发布时间】:2012-03-30 21:43:45
【问题描述】:

请帮忙!是否可以用其他元素替换 sql 数据库的 xml 字段中的元素。我尝试过使用 .modify(replace value of) 但我只能替换元素内的文本而不是节点。

最终,我尝试使用 XML 字段中的另一个元素(可能同名)来更新可能包含或不包含其他元素的元素。 (我使用的是 SQL Server 2008)

例如:

<Root>
  <Sub>
    <Value1>
    </Value1>
    <Value2>
    </Value2>
    <Value3>
    </Value3>
  </Sub>
</Root>

将被替换为:

<Root>
  <SubVERSION2>
    <Value1>
    </Value1>
    <Value2>
    </Value2>
    <Value3>
    </Value3>
  </SubVERSION2>
</Root>

任何帮助将不胜感激!

【问题讨论】:

    标签: sql xml sql-server-2008 xpath xquery


    【解决方案1】:

    您可以重新创建您的 XML:

    declare @x xml = '<Root>
      <Sub>
        <Value1>1
        </Value1>
        <Value2>2
        </Value2>
        <Value3>3
        </Value3>
      </Sub>
    </Root>'
    
    select cast(('<Root>' +
        cast(
        (
            select t.c.query('.')
            from @x.nodes('Root/Sub/*') t(c)
            for xml path(''), root('SubVERSION2')
        ) as nvarchar(max)) + '</Root>') as xml)
    

    产生所需的输出:

    <Root>
      <SubVERSION2>
        <Value1>1
        </Value1>
        <Value2>2
        </Value2>
        <Value3>3
        </Value3>
      </SubVERSION2>
    </Root>
    

    【讨论】:

      【解决方案2】:
      declare @T table(XMLCol xml)
      
      insert into @T values ('
      <Root>
        <Sub>
          <Value1></Value1>
          <Value2></Value2>
          <Value3></Value3>
        </Sub>
      </Root>')
      
      update @T set
        XMLCol = XMLCol.query('for $s in Root/Sub
                               return
                                 <Root>
                                   <SubVERSION2>
                                     { $s/* }
                                   </SubVERSION2>
                                 </Root>')
      

      结果:

      <Root>
        <SubVERSION2>
          <Value1 />
          <Value2 />
          <Value3 />
        </SubVERSION2>
      </Root>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-02
        • 2017-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多