3

如果我有这样的表:

项目

Name varchar(50)
Value real

然后我创建一个视图:

select sum(Value) as ValueSum from Items

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

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

4

1 回答 1

4

real只是 的同义词float(24)。参考:浮点数和实数(Transact-SQL)

当您对多个reals(甚至其中 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) 的某些字符串函数相同,这在公共表表达式中使用时很常见,需要显式 CAST 来消除表达式类型不等式错误。

于 2012-10-22T23:30:46.840 回答