将文本安全转换为XML

5

我在一个SQLServer2005数据库中有超过一百万行数据,其中一个文本列包含XML字符串。我想将该文本转换为XML数据类型以便提取数据的部分。

问题是,有些记录会在转换时抛出错误(即无效的XML)。如何忽略这些错误,以便正确转换所有有效的XML并将无效的XML存储为空值?

2个回答

5

在类似的情况下,我将XML列添加到与Text列相同的表中。然后,我使用了RBAR过程来尝试将“XML”从文本列复制到新的XML列(不是最快的方法,但可以提交单个写操作,并且这仅会发生一次,对吧?)。假设您的表具有int数据类型的PK。

declare @minid int, @maxid int;

select @minid=min(ID), @maxid=max(ID) from XMLTable;

while @minid <= @maxid
begin

begin try

update t
set XMLColumn = cast(TextColumn as XML)
from XMLTable t
where ID = @minid;

set @minid = @minid+1

end try
begin catch

print('XML transform failed on record ID:'+cast(@minid as varchar))

--advance to the next record
set @minid = @minid+1
end catch


end

发布后,我使用游标得到了非常相似的结果(仍然是RBAR - 不错的术语)。不过,我尝试了你的代码,它运行得很好!这是一个避免使用游标的好方法,而且错误消息也很贴心。谢谢! - Nelson Wu

3

我知道这是SQL Server 2012+的功能,但由于此问题在谷歌上排名第一,因此在这里提供:

SELECT 
COALESCE(TRY_CONVERT(xml, '</bad xml>'), 'InvalidXML')

您可以在此处找到文档:TRY_CONVERT (Transact-SQL)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接