SQL Server:如何使用modify()更改具有TEXT数据类型的列中的XML数据

Lyl*_*att 3 xml sql-server

我正在尝试修改数据库中的一些XML值.我可以使用它来处理包含使用XML数据类型的XML的列.但是,我不能让它在TEXT列上工作.

另外,我可以在TEXT列上选择XML数据(通过使用CAST()将其转换为XML),但仍然无法更新.

例:

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

错误:无法在文本上调用方法.

有什么方法可以让它在TEXT列上工作吗?已经存储了大量数据,因此我不必请求更改列上的数据类型.

谢谢!

Sunsu

mar*_*c_s 11

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

  • 从表中选择TEXT列到本地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
Run Code Online (Sandbox Code Playgroud)

它有点涉及,但它的工作原理!:-)