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

And*_*res 3 xml t-sql sql-server

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

<MediaClass xmlns="MediaClass/1">   
    <Media>
        <Title>Test</Title>
        <Type>Book</Type>
        <Price>1.00</Price>
    </Media>
</MediaClass>
Run Code Online (Sandbox Code Playgroud)

如何重命名Node MediaClass名称让我们说Book并更改名称空间值?

所以它看起来像:

<Book xmlns="Book/1">   
    <Media>
        <Title>Test</Title>
        <Type>Book</Type>
        <Price>1.00</Price>
    </Media>
</Book>
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*son 6

我不知道XML DML是否可行

它可能适合您使用替换.

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