为什么在案例陈述中有一个演员?

时间:2012-06-08 15:46:57

标签: tsql case

为什么,当你运行这个时,你会得到 2.00 作为答案吗?

declare @temp int  = 2
select CASE WHEN @temp = 1 THEN cast(@temp as decimal(5, 2))
         WHEN @temp = 2 THEN  @temp
         ELSE NULL
    END

但如果你运行这个,那么在选择@ temp2

时会得到 2 作为答案
declare @temp2 int = 2
select CAST(@temp2 as decimal(5,2))
select @temp2

桥是正确的:

从result_expressions中的类型集和可选的else_result_expression返回最高优先级类型。 (Source

Data Type Precedence

2 个答案:

答案 0 :(得分:3)

http://msdn.microsoft.com/en-us/library/ms181765.aspx 部分返回类型。 采用最高优先级类型。

答案 1 :(得分:2)

我认为返回值必须与case语句中每个可能输出的数据类型相同。它考虑了可能的输出,并尝试将它们全部转换为相同的类型。

第一个可能的返回值是decimal(5, 2)类型,第二个类型为int。它选择具有最高总数的数据类型,可以保存两个值,并自动为您输出所有输出。

您的第二个脚本的行为符合预期。实际上你得到两个值输出:

  • 2.00 - 这是第二行演员的结果
  • 2 - 这是@ temp2的值 - 这是一个int,你在第一行分配了它