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)
仅作出回应:
是的,但问题的核心是我如何检查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)
我看到的一个解决方案是逐行方法,你在其中尝试和CAST行XML,如果它XML成功转换成有效行插入有效值的表XML,如果它不能正确转换,值为'n'插入. 请参阅此主题以获取示例.
如果您需要保持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这两种方式都会比为每个查询传递一个更好的性能。