2015-10-14 129 views
3

我有一个select语句需要在它上面运行一个case语句来检查一个值,然后输入决定要获取哪一列。当将varchar值'AJH 123'转换为数据类型int时,SQL转换失败int

呼叫的开始是本

select 
case when req.ReportStatusCode in ('draft','submitted') then 
req.ID else 
req.reportNumber 
end as [Request Id \ Report Number], 

然而,当我把这种我得到一个误差变换将varchar值“AJH 123”为数据类型int时

转换失败。

这是报告编号字段,并且我不知道我怎么能阻止这个。

任何和所有帮助非常感谢

+0

什么是ID和reportNumber的数据类型? – EricZ

+0

在MSDN中查看[this](https://msdn.microsoft.com/en-us/library/ms190309.aspx)文章。它解释了为什么你会得到这个错误。 –

回答

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

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

+0

谢谢你的工作,但我必须等12分钟才能接受答案 –

+0

不要懒惰指定长度或varchar,这是一个坏习惯使用。在某些情况下,它将默认为长度1,请调试! http://stackoverflow.com/questions/359257/why-is-30-the-default-length-for-varchar-when-using-cast –

+0

@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], 
相关问题