【问题标题】:How to rename XML node name in a SQL Server如何在 SQL Server 中重命名 XML 节点名称
【发布时间】:2011-09-06 08:03:36
【问题描述】:

我的数据库中有一个表,其中一列存储 XML 数据。由于源代码的更改,我们希望重命名一个特定的 XML 节点名称和 XML 命名空间。假设我有下面的 XML:

<MediaClass xmlns="MediaClass/1">   
    <Media>
        <Title>Test</Title>
        <Type>Book</Type>
        <Price>1.00</Price>
    </Media>
</MediaClass>

如何将节点 MediaClass 名称重命名为 Book 并更改命名空间值?

所以它看起来像:

<Book xmlns="Book/1">   
    <Media>
        <Title>Test</Title>
        <Type>Book</Type>
        <Price>1.00</Price>
    </Media>
</Book>

我需要完全在 T-SQL 中完成,因为这将用作迁移脚本。我们的客户安装的最低 SQL Server 是 SQL Server 2005。

【问题讨论】:

    标签: sql-server xml tsql


    【解决方案1】:

    我不知道XML DML是否可以这样做

    您可以改用replace

    update YourTable set
      XMLCol = replace(replace(cast(XMLCol as nvarchar(max)), 
                               '<MediaClass xmlns="MediaClass/1">', 
                               '<Book xmlns="Book/1">'), 
                       '</MediaClass>', 
                       '</Book>')
    

    【讨论】:

    • 是的,这确实是我的第一种方法,但是因为我的 XML 大于 8000 个字符,我必须使用更复杂的解决方案 (sqlteam.com/article/search-and-replace-in-a-text-column),我想避免这样做。
    • @Andres - 投射到 nvarchar(max) 时这不是问题。
    • 是的,经过尝试和猜测,我认为这是现在最可能和最可行的方法。谢谢
    • 太棒了...这帮了大忙! :)
    猜你喜欢
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 2016-06-09
    相关资源
    最近更新 更多