2010-02-19 52 views
3

我试图修改数据库中的某些XML值。我可以让它在包含使用XML数据类型的XML的列上工作。但是,我无法使它在TEXT列上工作。另外,我可以在TEXT列上选择XML数据(通过使用CAST()将其转换为XML),但仍然无法更新。SQL Server:如何使用modify()来更改具有TEXT数据类型的列中的XML数据

例子:

UPDATE [xmltest] 
SET [xmltext].modify('replace value of (/data/item[1]/text())[1] with "newvalue"') 

错误:无法调用文本的方法。

有什么方法可以让我在TEXT列上工作?已经存储了数据的TONS,所以我不必请求更改列上的数据类型。

谢谢!

Sunsu

回答

11

您不能直接修改这一点 - 你可以做的是一个三个步骤的过程:

  • 选择从表中的文本列到本地XML变量
  • 修改XML变量
  • 写回您更改数据库

像这样的东西:

-- declare new local variable, load TEXT into that local var 
DECLARE @temp XML 

SELECT 
    @temp = CAST(YourColumn AS XML) 
FROM 
    dbo.YourTable 
WHERE 
    ID = 5  -- or whatever criteria you have 

-- make your modification on that local XML var 
SET 
    @temp.modify('replace value of (/data/item[1]/text())[1] with "newvalue"') 

-- write it back into the table as TEXT column  
UPDATE 
    dbo.YourTable 
SET 
    YourColumn = CAST(CAST(@temp AS VARCHAR(MAX)) AS TEXT) 
WHERE 
    ID = 5  -- or whatever criteria you have 

这是有点涉及,但它的作品! :-)

相关问题