使用SQL Case语句获取转换错误

时间:2016-03-01 15:53:33

标签: sql sql-server

 CASE WHEN Items.SerialNumber = -1 THEN Items.Aux1
 ELSE Items.SerialNumber
 END AS 'CheckNo'

这不起作用。我正在将转换varchar转换为int错误。我很困惑,因为如果我把它作为一个查询运行它。我只是在case语句中得到错误而不明白为什么。

1 个答案:

答案 0 :(得分:7)

来自MSDN case statement

  

从中输入类型集中的最高优先级类型   result_expressions和可选的else_result_expression。

INT 优先级高于varchar,因此所有when表达式都将隐式转换为INT。要了解有关数据类型优先级 check here

的更多信息

要避免隐式整数转换,请将INT转换为Varchar表达式中的when

SELECT CASE
         WHEN Items.SerialNumber = -1 THEN Items.Aux1
         ELSE Cast(Items.SerialNumber AS VARCHAR(100))
       END AS 'CheckNo'