【问题标题】:how to update element name in a xml column in sql server如何更新 sql server 中 xml 列中的元素名称
【发布时间】:2013-11-13 17:01:36
【问题描述】:

我的表中有一个 xml 列,如下所示:

   <info>
      <teacher>     
            <name>John</name>   
      </teacher>
      <StInfo>
        <name>William</name>    
        <address>India</address>    
      </StInfo>
    </info>

我只需要更新到

 <info>
          <teacher>     
                <name>John</name>   
          </teacher>
          <Student>
            <name>William</name>    
            <address>India</address>    
          </Student>
        </info>

【问题讨论】:

    标签: c# sql-server xml sqlxml


    【解决方案1】:

    我使用您的数据在 SQL Server 中为您构建了一个示例:

    DECLARE @StackExample TABLE (
         Id UNIQUEIDENTIFIER NOT NULL PRIMARY KEY DEFAULT(NEWID())
        ,XmlColumn XML
    )
    
    INSERT INTO @StackExample(XmlColumn) VALUES('<info>
      <StInfo>
        <name>William</name>    
        <address>India</address>    
      </StInfo>
    </info>')
    
    
    UPDATE T
    SET XmlColumn = XmlColumn.query('<info>
      <Student>
      {info/StInfo/*}
      </Student>
    </info>')
    FROM @StackExample t
    
    SELECT * FROM @StackExample
    

    希望对你有帮助

    【讨论】:

    • 它正在工作,但很抱歉我没有给出完整的 xml 结构,因为在 级别也有一些其他元素在执行后被删除,我已经更新了有问题的 xml
    • 您只需在更新语句中的 标记之前添加 {info/teacher} 即可。抱歉,我无法测试它,但我想给你一个快速的回复,让你尝试更改。
    【解决方案2】:

    据我所知,无法使用 SQL DML 修改 xml 元素名称。转成varchar后可以替换:

    update Table1 set
        data = cast(
          replace(
            replace(
              cast(data as nvarchar(max)),
            '</StInfo>', '</Student>'
            ),
          '<StInfo>', '<Student>'
          )
        as xml)
    

    或者您可以使用 XQuery 重构您的 xml:

    update Table1 set
        data = data.query('<info>{
                    for $i in info/StInfo
                    return element Student {$i/*}
                    }</info>'
        )
    

    这些方法甚至适用于多个元素。

    sql fiddle demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多