为什么,当你运行这个时,你会得到 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)
答案 0 :(得分:3)
见http://msdn.microsoft.com/en-us/library/ms181765.aspx 部分返回类型。 采用最高优先级类型。
答案 1 :(得分:2)
我认为返回值必须与case语句中每个可能输出的数据类型相同。它考虑了可能的输出,并尝试将它们全部转换为相同的类型。
第一个可能的返回值是decimal(5, 2)
类型,第二个类型为int
。它选择具有最高总数的数据类型,可以保存两个值,并自动为您输出所有输出。
您的第二个脚本的行为符合预期。实际上你得到两个值输出:
2.00
- 这是第二行演员的结果2
- 这是@ temp2的值 - 这是一个int,你在第一行分配了它