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

-7 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 
Run Code Online (Sandbox Code Playgroud)

错误消息"将varchar值'hi'转换为数据类型int时,消息245,级别16,状态1,行2转换失败." 但是当我修改上面的代码时,它成功执行了

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

在此输入图像描述

可以解释为什么我在执行上一个查询时出错了吗?提前致谢

Raj*_*Raj 6

你的CASE...ELSE是123,这是一个整数.这优先于varchar数据类型.您正在尝试将其他值转换为整数数据类型时看到错误.将ELSE值括在单引号中应解决此问题

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