2011-09-06 105 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