-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)
可以解释为什么我在执行上一个查询时出错了吗?提前致谢
你的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)