案例陈述中出现此错误的原因是啥
Posted
技术标签:
【中文标题】案例陈述中出现此错误的原因是啥【英文标题】:what is the reason behind this error in case statement案例陈述中出现此错误的原因是什么 【发布时间】:2015-11-24 07:51:09 【问题描述】:当我执行以下代码时,我得到一个错误
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
谁能解释为什么我在执行上一个查询时遇到错误? 提前致谢
【问题讨论】:
出于同样的原因,它发生在大多数语言中?您有一个处理不同数据类型值的表达式(不是语句),因此考虑了precedence。 @jarlh - 不,两者都包含CASE
表达式。 SQL Server 没有CASE
语句。
@Damien_The_Unbeliever,对不起,对我来说太早了。刚刚删除了我的评论。现在需要一些咖啡。
@Damien_The_Unbeliever boss case 语句存在于 sql server 中
@asktosmart - 不,SQL Server 只有一个 CASE
expression。它没有CASE
声明。
【参考方案1】:
您的CASE...ELSE
是123,它是一个整数。这优先于 varchar
数据类型。您看到错误是因为 SQL Server 正在尝试将您的其他值转换为整数数据类型。将 ELSE
值括在单引号中应该可以解决此问题
declare @var varchar(10)='a'
select case @var
when 'a' then 'hi'
when 'b' then 'hello'
else '123'
end
【讨论】:
感谢您的快速响应。 谁对答案投了反对票,你能解释一下吗?【参考方案2】:因为您将@var
声明为varchar
,并且您试图在case
中的else
条件中显示一个int 值。
所以肯定会发生转换错误。
正如 Raj 所回答的,如果您在 '123'
周围加上引号,它会起作用。
【讨论】:
....我在 else 块中写过....如果所有条件都失败了,那么应该返回可用的值....我问我为什么会出错以上是关于案例陈述中出现此错误的原因是啥的主要内容,如果未能解决你的问题,请参考以下文章
此 HealthKit 错误的原因是啥:“将样本添加到锻炼时发生错误”?
此 HealthKit 错误的原因是啥:“将样本添加到锻炼时发生错误”?