为什么我在使用条件情况时得到一个int数据类型?

时间:2015-02-18 09:31:33

标签: sql-server

考虑以下Sql片段:

declare @param as int
set @param=1
select
case when @param=1 then '987' else '' end as Value1,
case when @param=2 then 987 else '' end as Value2,
case when @param<>2 then '' else 987 end as Value3

我希望得到1行3个字段:字符串987和2个空字符串,但我得到以下结果:

enter image description here

你能解释一下我为什么得到0值?我知道这是因为该列被解释为整数数据类型但不确定原因。

2 个答案:

答案 0 :(得分:3)

在写这个问题的那一刻,我找到了答案:

此行为是由Data Type Precedence

引起的

答案 1 :(得分:0)

当运算符组合了两种不同数据类型的表达式时,数据类型优先级的规则指定具有较低优先级的数据类型转换为具有较高优先级的数据类型。如果转换不是受支持的隐式转换,则会返回错误。当两个操作数表达式具有相同的数据类型时,操作的结果具有该数据类型。

了解更多信息

https://msdn.microsoft.com/en-us/library/ms190309.aspx