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

时间:2015-11-24 07:51:09

标签: 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 'a' then 'hi'
when 'b' then 'hello'
else cast(123 as char(4))
end 

enter image description here

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

2 个答案:

答案 0 :(得分: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 

答案 1 :(得分:0)

这是因为您将@var声明为varchar,并且您试图在else中的case条件中显示一个int值。

因此肯定会发生转换错误。

正如Raj所回答的那样,如果你在'123'附近放置引号,它就有效。