将文本安全地转换为XML

时间:2011-04-20 00:55:06

标签: sql-server xml tsql

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

我知道这是SQL Server 2012+的功能,但由于这个问题是谷歌的最高结果,因此它是:

a

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

答案 2 :(得分:-1)

另一种可能性是写一个.net程序集,它将xml加载到XMLdocument中,如果xml有效则返回BOOL,这样你就可以在sql中实际解析它