为什么我的CASE语句要求THEN部分是INT数据类型?

wha*_*hat 0 sql-server

我试图运行一个查询,其中下面的CASE语句是其中一行.我正在使用Report Builder 3.0.

但是,我收到的错误是:

将varchar值'Case 1'转换为数据类型int时转换失败; Microsoft SQL Server,错误:245".

为什么CASE语句要求THEN部分是INT数据类型?

  (CASE
            WHEN    jobs.Uf_Production_Line = 'LN BM6'
                    THEN 'Case 1'
            ELSE

            99999
        END
    ) AS line
Run Code Online (Sandbox Code Playgroud)

Fel*_*tan 5

使用CASEstatement时,所有结果表达式必须具有相同的数据类型.如果不是,则结果将转换为具有更高优先级的数据类型.据BOL说

返回result_expressions中的类型集和可选的else_result_expression中的最高优先级类型.

而且,由于INT具有更高的数据类型优先VARCHAR,你的查询会产生一个错误:

将varchar值'Case 1'转换为数据类型int时转换失败; Microsoft SQL Server,错误:245".

要解决此问题,您应该将您的ELSE零件转换为VARCHAR.

ELSE '99999'
Run Code Online (Sandbox Code Playgroud)