t-sql:将varchar转换为xml

Dav*_*vid 9 t-sql sql-server sql-server-2008 xml-parsing

我有一些存储在varchar列中的有效和无效的xml值.

我想将有效的xml值转换为实际的xml数据类型,并且无效为null.

这样做的好方法是什么?

就像是:

SELECT 
    CASE WHEN dbo.isValidXML(xml_data) THEN CAST(xml_data as XML)
    ELSE null 
END
Run Code Online (Sandbox Code Playgroud)

Que*_*CPO 7

仅作出回应:

是的,但问题的核心是我如何检查XML是否有效?

你的XML是否会像下面的第二行那样中断:

SELECT CAST('<xml>Yep this is xml</xml>' AS XML)
SELECT CAST('<xml>Nope, not xml</x' AS XML)
Run Code Online (Sandbox Code Playgroud)

我看到的一个解决方案是逐行方法,你在其中尝试和CASTXML,如果它XML成功转换成有效行插入有效值的表XML,如果它不能正确转换,值为'n'插入. 请参阅此主题以获取示例.


chr*_*dev 0

如果您需要保持XML有效还是无效,您可以在表上添加一个标志,IsValid (bit)例如。然后,加载过程可以对该数据进行一次性检查,以检查 XML 是否有效并根据结果设置标志。这样您就可以使用查询获取有效的 XML:

SELECT 
    CASE WHEN IsValid = 1 THEN CAST(xml_data as XML)
    ELSE null 
END
Run Code Online (Sandbox Code Playgroud)

如果您不需要保留无效的 XML,则只需在加载过程中拒绝它,将字段设置为NULL,因此查询将如下所示:

SELECT 
    CASE WHEN xml_data IS NOT NULL THEN CAST(xml_data as XML)
    ELSE null 
END
Run Code Online (Sandbox Code Playgroud)

SQL function这两种方式都会比为每个查询传递一个更好的性能。