2010-02-19 18 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 

這是有點涉及,但它的作品! :-)

相關問題