如何在SQL Server中重命名XML节点名称

3

我在我的数据库中有一个表,其中一列存储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。

1个回答

6

我不确定使用XML DML是否可行。

你可以尝试使用replace来替代。

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

1
是的,那确实是我的第一种方法,但由于我的XML超过8000个字符,我不得不使用更复杂的解决方案(http://www.sqlteam.com/article/search-and-replace-in-a-text-column),而我想避免这种情况。 - Andres
1
@Andres - 当您将其强制转换为 nvarchar(max) 时,这不是一个问题。 - Mikael Eriksson
1
是的,在尝试和猜测之后,我认为这现在是最可能和可行的方法。谢谢。 - Andres
太棒了...这帮了很大的忙! :) - Leniel Maccaferri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接