SQL Server中删除Varchar字段内XML节点的问题求助
解决SQL Server中删除字符串字段内XML节点的问题
问题原因
你之前的语句无效有两个核心原因:
.modify()方法是用来更新XML类型的变量或字段的,不能直接在SELECT查询里返回修改后的结果,它只负责修改原数据,不会输出处理后的内容。- 语句末尾多了个语法错误的
*,这会导致SQL执行报错。
另外你的Data字段是Varchar类型,必须先转换为XML类型才能进行XML节点操作,处理完成后再转回Varchar(如果需要保留原字段类型)。
解决方案
根据你的需求,分两种场景处理:
场景1:仅查询处理后的结果(不修改原表数据)
直接提取需要保留的<Name>节点,重新构造XML后转回字符串:
SELECT CAST( '<Info>' + CAST(CAST(Data AS XML).query('/Info/Name') AS VARCHAR(MAX)) + '</Info>' AS VARCHAR(60) ) AS ModifiedData FROM Person;
或者用XML修改的方式,先将字段转为XML变量处理后再输出:
SELECT CAST( (SELECT CAST(Data AS XML) FOR XML PATH(''), TYPE) .modify('delete /Info/Age | /Info/School') AS VARCHAR(60) ) AS ModifiedData FROM Person;
场景2:直接更新原表中的Data字段
如果需要永久修改表中的数据,用变量中转处理XML:
DECLARE @tempXml XML; UPDATE Person SET @tempXml = CAST(Data AS XML), -- 依次删除Age和School节点 @tempXml.modify('delete /Info/Age'), @tempXml.modify('delete /Info/School'), -- 将处理后的XML转回Varchar存回字段 Data = CAST(@tempXml AS VARCHAR(60));
验证结果
以上两种方法处理后,都会得到你期望的输出:
<Info> <Name>Rajesh</Name> </Info>
内容的提问来源于stack exchange,提问作者Rajesh Kumar Duraisamy
相关产品推荐
相关产品推荐

