2

为什么,当你运行它时,你会得到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 的类型集中返回优先级最高的类型。(来源

数据类型优先级

4

2 回答 2

3

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

于 2012-06-08T15:55:06.460 回答
2

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

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

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

  • 2.00- 这是第二行演员的结果
  • 2- 这是 @temp2 的值 - 这是一个 int,您在第一行分配了它
于 2012-06-08T15:52:08.947 回答