2014-01-21 29 views
1

我一直在嘗試使用SQL Server 2008中算術溢出錯誤BIGINT

select sum(columnA) 
from tableA 

但我不斷收到錯誤,總結一列的行,

Arithmetic overflow error converting expression to data type bigint

ColumnA已經設置作爲bigint在桌上,甚至當我嘗試

select sum(cast(columnA as bigint)) from tableA 

我仍然得到同樣的錯誤。我知道列範圍內的值總和應該等於111500000000000000左右。對於bigint,這太大了嗎?

如果是這樣,我該如何解決這個錯誤?

+2

'BIGINT'範圍如下'-2^63(-9,223,372,036,854,775,808)至2^63-1(9,223,372,036,854,775,807)'大小爲8個字節http://msdn.microsoft.com/en-us/ library/ms187745.aspx – 2014-01-21 17:37:45

+1

您確定這是該列的總和的範圍嗎?該值在「bigint」的限制範圍內。如果您嘗試轉換爲「數字(38,0)」數據類型,該怎麼辦? –

+0

我剛剛在我的SQL服務器上運行了一個查詢語句[在表y中選擇cast sum(x)as bigint]。它跑了,雖然小得多。是否有可能在表中有一些非數字數據?這個列的數據類型是什麼? –

回答

0

如果您認爲SUM的總數可能會很大,您可以將其分成2個查詢,如果您使用主鍵或其他方式來分割數據。這將是一個很好的測試,以確定總數實際上是多少。

SELECT SUM(columnA) 
FROM tableA 
Where PrimaryID < 50 --Or what ever is half your data 

SELECT SUM(columnA) 
FROM tableA 
Where PrimaryID >= 50 

後你會得到個別SUM您可以驗證總,如果仍然不工作,你總是可以分解成多個查詢。

0

請嘗試以下操作。 decimal(38,0)是SQL Server可以處理的最大數字數據類型(保存的數字大於bigint)。

select sum(cast(columnA as decimal(38,0))) from tableA 
相關問題