为什么SUM(real)在SQL Server中返回float数据类型?

时间:2012-10-22 23:27:04

标签: sql-server sqldatatypes

如果我有这样的表:

产品

Name varchar(50)
Value real

然后我创建一个视图:

select sum(Value) as ValueSum from Items

ValueSum数据类型是一个浮点数。为什么它不是真正的数据类型?

此外,SQL Server 2005和2008之间是否有所改变?我有一个旧的数据库备份,其中视图中的ValueSum返回为真正的非浮动。我可以恢复备份,如果我查看视图,它看起来像是返回一个真实的,但如果重新保存它就变成了一个浮点数。

1 个答案:

答案 0 :(得分:3)

real只是float(24)的同义词。参考:float and real (Transact-SQL)

当SUM多个real,甚至其中两个时,您可能会溢出real数据类型,因此它会被提升为更大的数据类型。

测试:

declare @t table (a real);
insert @t select 123;
select SQL_VARIANT_PROPERTY(sum(a), 'basetype'),
       SQL_VARIANT_PROPERTY(sum(a), 'precision'),
       SQL_VARIANT_PROPERTY(sum(a), 'scale')
from @t;

-------------
float    53    0

这与某些字符串函数相同,导致结果转到(N)Varchar(MAX),这在公用表表达式中很常见,需要显式CAST来消除表达式类型的不等式错误。