修改存储在varchar中的xml

时间:2014-07-18 12:56:15

标签: sql sql-server tsql

我在旧系统中使用此表

CREATE TABLE Tmp (Content VARCHAR(MAX)) -- Note it's VARCHAR instead of XML
GO

INSERT INTO Tmp
VALUES ('<Result><Tag>tag1</Tag></Result>')
GO

如何从表格中删除Tag元素?我知道如果ContentXML,我可以使用以下sql,但它不适用于'VARCHAR'。

UPDATE tmp 
SET Content.MODIFY('delete /Result/Tag[1]')

2 个答案:

答案 0 :(得分:1)

UPDATE Tmp
SET content = REPLACE(REPLACE(content, '<Tag>', ''), '</Tag>', '')   

编辑:

UPDATE Tmp
SET content =
LEFT(content, CHARINDEX('<Tag>', content) - 1) + 
RIGHT(content, LEN(content) - CHARINDEX('</Tag>', content) - 5)

答案 1 :(得分:1)

@Linger激励我使用REPLACE ...

UPDATE Tmp
SET Content = Replace(Content,
        CONVERT(VARCHAR(MAX), CONVERT(XML, Content).query('/Result/Tag[1]'))
        ,'')