2011-11-17 69 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' ... –