2011-09-06 103 views
3

我在我的数据库中有一个存储XML数据的列。由于源代码中的更改,我们要重命名一个特定的XML节点名称和XML名称空间。比方说,我有波纹管的XML:如何在SQL Server中重命名XML节点名称

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

如何重命名节点MediaClass名称让我们说,改变它的命名空间的价值?

因此,它可以像为:

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

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

回答

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)'时,这不是问题。 –

+1

是的,经过尝试和猜测后,我认为这是现在最可行和最可行的方法。谢谢 – Andres