SQL转换失败:将varchar值“AJH 123”转换为数据类型int时失败。

3
我有一个SELECT语句,需要在其上运行一个CASE语句来首先检查一个值,然后决定获取哪一列。
调用的开始如下:
select 
case when req.ReportStatusCode in ('draft','submitted') then 
req.ID else 
req.reportNumber
end as [Request Id \ Report Number],

然而,当我调用它时,出现了错误。
转换失败,将varchar值“AJH 123”转换为数据类型int。
这是报告号码字段,我不知道如何停止这种情况发生。
非常感谢任何和所有的帮助。

ID和reportNumber的数据类型是什么? - EricZ
看看MSDN上的这篇文章,它解释了为什么会出现这个错误。 - Giorgos Betsos
2个回答

5
case when req.ReportStatusCode in ('draft','submitted')
then cast(req.ID as varchar(255)) else  cast(req.reportNumber as varchar(255)) end

确保case返回相同的数据类型。


谢谢,这个方法可行,但我必须等待12分钟才能接受答案。 - Simon Price
不要偷懒,指定一个长度或者varchar类型,使用默认长度1的坏习惯会在某些情况下导致调试困难!https://dev59.com/inRC5IYBdhLWcg3wROpQ - KM.

1
这是因为 case 语句应该评估为一种类型,所以它在此处将 varchar 转换为 int。明确将 int 转换为 varchar:
select 
case when req.ReportStatusCode in ('draft','submitted') then 
     cast(req.ID as varchar(100)) else 
     req.reportNumber
end as [Request Id \ Report Number],

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接