Vac*_*ano 2 sql-server t-sql sql-server-2012
我有一列是 varchar(max)。它主要包含有效的 XML。但有时它有无效的 xml(我仍然需要)。
我试图为这个表创建一个视图,当数据是有效的 XML 时,它允许值显示为 XML(使用 SSMS 附带的漂亮链接功能),但当它是无效的 XML 时仍然显示字符串。
像这样:
SELECT TRY_CAST([RunLog] AS xml) as [Log], -- works
RunLog, -- Also Works
-- This is the one I want, but it tries to parse all of them
-- (even the ones that fail the cast)
Case
When Try_Cast(RunLog as xml) is NULL
Then NettinRunLoggLog else CAST(RunLog AS xml)
end as CombinedLog
FROM LoggingTable
Run Code Online (Sandbox Code Playgroud)
我认为这是一个失败的原因,因为 SQL Server 不允许结果具有多个数据类型。但我想我会问专家以确定。
case 表达式的所有输出必须是相同的数据类型。
如果维护有效 XML 数据的 XML 数据类型值得对无效数据进行一些操作,那么一种解决方法可能是将无效数据像声明一样包装起来,然后再将其转换为 XML:
cast('<?invalid ' + RunLog + ' ?>' as xml)
Run Code Online (Sandbox Code Playgroud)
此外,您不需要在同一个表达式中同时使用try_cast
和cast
。
coalesce(try_cast(RunLog as xml),cast('<?invalid ' + RunLog + ' ?>' as xml))
Run Code Online (Sandbox Code Playgroud)