如果我有这样的表:
项目
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),这在通用表表达式中使用时很常见,需要明确的铸造以摆脱表达式类型不等式错误。