当我执行以下代码时,出现错误
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
任何人都可以解释为什么我在执行上一个查询时出错了吗? 提前谢谢
答案 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'
附近放置引号,它就有效。