2012-10-22 35 views
2

如果我有這樣的一個表:爲什麼SUM(實數)在SQL Server中返回一個float數據類型?

項目

Name varchar(50) 
Value real 

然後,我創建一個視圖:

select sum(Value) as ValueSum from Items 

的ValueSum數據類型出來是一個浮動。爲什麼它不是一個真正的數據類型?

另外,SQL Server 2005和2008之間有這個變化嗎?我有一箇舊的數據庫備份,其中視圖中的ValueSum返回爲真實的非浮點數。我可以恢復備份,如果我看看它看起來像是返回一個真實的,但如果重新保存它成爲一個浮動。

+0

我對這些版本感到困惑。我的意思是SQL 2005和2008年。我已經更新了這個問題。 – dtc

回答

3

real只是float(24)的同義詞。 Ref: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),在公用表表達式中使用時,這是常見的,需要顯式CAST某些字符串函數擺脫表達式不等式的錯誤。

+0

現在我明白總和(實際)返回浮動。爲什麼當我查看備份時,視圖會返回實際值呢?只有在我打開視圖並重新保存後,它纔會顯示它返回浮動。 – dtc

+0

我對SQL Server 2005實例運行同樣的事情,並得到相同的浮點數(53)結果。 – RichardTheKiwi

+0

謝謝您的檢查。我確信,當我恢復數據庫時,視圖表示他們正在返回實數,但我不知道會如何發生。如果我打開它們並重新保存它們,那麼它們會返回浮動。 – dtc

相關問題