Sql case语句中出现此错误的原因是什么

Sql case语句中出现此错误的原因是什么,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,当我执行下面的代码时,我得到了一个错误 declare @var varchar(10)='a' select case @var when 'a' then 'hi' when 'b' then 'hello' else 123 end 错误消息是消息245,16级,状态1,第2行 将varchar值“hi”转换为数据类型int时,转换失败。“ 但是当我修改上面的代码时,它成功地执行了 declare @var varchar(10)='a' select case @var when

当我执行下面的代码时,我得到了一个错误

declare @var varchar(10)='a' 
select case @var
when 'a' then 'hi'
when 'b' then 'hello'
else 123
end 
错误消息是消息245,16级,状态1,第2行 将varchar值“hi”转换为数据类型int时,转换失败。“ 但是当我修改上面的代码时,它成功地执行了

declare @var varchar(10)='a' 
select case @var
when 'a' then 'hi'
when 'b' then 'hello'
else cast(123 as char(4))
end 

有人能解释我执行上一个查询时出错的原因吗?
提前感谢

您的
案例…否则
为123,这是一个整数。这优先于
varchar
datatype。当SQL Server试图将其他值转换为整数数据类型时,您会看到错误。将
ELSE
值括在单引号中可以解决此问题

declare @var varchar(10)='a' 
select case @var
when 'a' then 'hi'
when 'b' then 'hello'
else '123'
end 

这是因为您将
@var
声明为
varchar
,并试图在
案例中的
else
条件中显示int值

所以肯定会发生转换错误


正如Raj所回答的,如果你在
'123'
周围加上引号,它就会起作用。

因为在大多数语言中都会发生同样的原因?您有一个表达式(不是语句)处理不同数据类型的值,因此需要考虑。@jarlh-no,两者都包含
CASE
表达式。SQL Server没有
CASE
语句。@Damien_不信者,对不起,对我来说太早了。我刚刚删除了我的评论。现在需要一些咖啡。@Damien\u不信主的老板案例语句存在于sql中server@asktosmart-否,SQL Server只有一个。它没有一个
CASE
语句。。。谢谢你的快速回复。不管是谁否决了答案,请你解释一下你自己好吗?…我已经在else block中写了。。。。如果所有条件都失败,那么应该返回可用的值……我在问为什么会出现错误