为什么sum(real)返回SQL Server中的float数据类型



如果我有这样的表:

项目

Name varchar(50)
Value real

然后我创建一个视图:

select sum(Value) as ValueSum from Items

值数据类型是浮点。为什么它不仍然是真实的数据类型?

另外,这是否在SQL Server 2005和2008之间发生了变化?我有一个旧的数据库备份,其中视图中的值返回为真实的浮点。我可以还原备份,如果查看视图,它看起来像是返回真实的,但是如果重新放置,它将变成浮点。

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

当您总和多个 real s(甚至其中2个)时,您可以溢出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),这在通用表表达式中使用时很常见,需要明确的铸造以摆脱表达式类型不等式错误。

相关内容

最新更新