2009-07-29 77 views
36

时,我有一个表,在它的一些相当大的数量的整数列给出算术溢出。我试着去平均一些这方面的价值,有时它的工作原理其他时候,它给这个错误SQL服务器计算平均

“算术溢出错误将表达式转换为数据类型为int。”

我打破了下来,这个样本产生错误

create table LargeNumbers (number int) 
insert into LargeNumbers values (100000000) -- X 30 
select avg(number) from LargeNumbers 

有谁知道我怎么能得到这个计算平均?

回答

55

内部SQL Server在求和值(由以后数划分),并将它们存储在列中的数据类型 - 在这种情况下,一个int - 这是不是大到足以容纳总和 - 如果你投的价值作为BIGINT第一它将求和值也存储在BIGINT那些值 - 这可能是足够大的,则平均计算可以继续进行。

select avg(cast(number as bigint)) from LargeNumbers 
5

您需要将数字强制转换为大于int的东西,比如说一个大整数,因为要计算平均SQL将所有值作为整数求和,这就是溢出的位置。

+0

我不能改变表strucutre容易 - 所以即时与在查询过程中这样做的答案 – user129211 2009-07-29 02:11:30