2011-11-17 68 views
2

我在名爲「CONTENT_HTML」表中的XML列在其中的數據會看起來像:如何修改SQL Server中的XML節點

<root> 
     <Category>Cover Impression</Category> 
     <Title>Mystery of the Wolves</Title> 
     <Month>April</Month> 
     ... 
     ... 
    </root> 

我想從封面印象<Category>下更換元以封面印象,而更換後,我用這一類的表應該像

<Category>Cover Impressions</Category> 

我查了這篇文章(http://stackoverflow.com/questions/7316712/how-to-rename-xml-node -name-in-a-sql-server)爲我的問題,但不完全是我正在尋找。

有人能指出我正確的方向嗎?

後建議樓下我想這:

declare @newValue XML 
select @newValue = 'Cover Impressions' 
update dbo.content 
set content_html.modify('replace value of (/root/Category/text())[1] with sql:variable("@newValue")') 

但給我「不能調用NTEXT方法」錯誤 謝謝,

+1

好咄 - 如果你列的類型是'NTEXT'的,當然XML功能將無法正常工作!我只是假設它是一個XML列(因爲你說過這樣!**)首先:**不再使用NTEXT ** - 它已被棄用 - 如果有的話,使用'nvarchar(max)',if它是一個包含XML的列 - ** USE **'XML' ... –

回答

1

你可以嘗試這樣的..

此代碼..

<Sample> 
    <NodeOne>Value1</NodeOne> 
    <NodeTwo>Value2</NodeTwo> 
    <NodeThree>OldValue</NodeThree> 
</Sample> 

替換NodeThre中的'OldValue' e與'NewValue'。

DECLARE @newValue varchar(50) 
SELECT @newValue = 'NewValue' 

UPDATE [Product] 
SET ProductXml.modify('replace value of (/Sample/NodeThree/text())[1] with sql:variable("@newValue")') 

請通過這個爲more information

+0

感謝您的回覆,但是當我執行此語句時,出現「無法調用ntext上的方法」錯誤消息。 – Ron

+0

@ marc_s感謝您的反饋,我不精通sql - 無論如何,我嘗試了將自己的變量聲明爲XML的方法,並且仍然得到相同的消息 - 「無法調用ntext上的方法」... – Ron

0

更新:什麼你可以試試(但是 - 在TEST環境第一!)是隻簡單地改變你的列的數據類型到XML:

ALTER TABLE dbo.YourTable 
    ALTER COLUMN Content_Html XML 

如果在該列的所有行中只有有效的XML內容,則該命令應該工作。

一旦已經工作 - 那麼你可以嘗試一下本作的具體的例子:

UPDATE dbo.YourTable 
SET Content_Html.modify('replace value of (/root/Category/text())[1] with "Cover Impressions"') 
WHERE ...(whatever condition need here)..... 
+0

Thanks @marc_s,am得到與上面相同的錯誤... – Ron

+1

呃duh - 如果你的列的類型是'NTEXT',那麼XML函數當然不起作用!我只是假設它是一個XML列(因爲你說過這樣!**)首先:**不再使用NTEXT ** - 它已被棄用 - 如果有的話,使用'nvarchar(max)',if它是一個包含XML的列 - ** USE **'XML' ... –