我可以使用 Try_Cast 为我提供具有不同数据类型的查询结果列吗?

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 不允许结果具有多个数据类型。但我想我会问专家以确定。

SQL*_*Fox 5

case 表达式的所有输出必须是相同的数据类型。

如果维护有效 XML 数据的 XML 数据类型值得对无效数据进行一些操作,那么一种解决方法可能是将无效数据像声明一样包装起来,然后再将其转换为 XML:

cast('<?invalid ' + RunLog + ' ?>' as xml)
Run Code Online (Sandbox Code Playgroud)

此外,您不需要在同一个表达式中同时使用try_castcast

coalesce(try_cast(RunLog as xml),cast('<?invalid ' + RunLog + ' ?>' as xml))
Run Code Online (Sandbox Code Playgroud)