具有Int和Decimal Convertion的Sql Server SUM函数

Nir*_*edi 1 sql sql-server sql-server-2008

最近我正在使用SQL Server数据类型,并将大量数据放入表中,并试图用Varchar和Numeric数据计算出性能.但是,我得到了一些错误,我认为不应该是这样,但事实确实如此.我的问题如下:

我有一张桌子:

create table sa(f1 varchar(100))
Run Code Online (Sandbox Code Playgroud)

我有一个存储过程,它将100000个数据插入表中:

create proc sad
as
begin
    declare @i int=0
    while @i<100000
    begin
       insert into sa values(@i)
       set @i=@i+1
    end
end


exec sad
Run Code Online (Sandbox Code Playgroud)

我测试了以下内容:

select CONVERT(int,f1) from sa  //Works Fine, i tested after the Problem
select sum(convert(int,f1)) from sa  //Didn't Worked, So i tested above and Below
select sum(convert(decimal(18,2),f1)) from sa //And, it again works fine
Run Code Online (Sandbox Code Playgroud)

但是,当我将F1转换为Int时,它会显示错误.
但是,当我只选择转换为Int时它很好.
并且,当我总结将F1转换为十进制时,它工作正常.

SUM函数数据类型是什么?
在Above数据上它适用于Decimal而不是Int?
为什么?

我得到以下错误

将表达式转换为数据类型int的算术溢出错误.

ang*_*son 7

你总结的是INT有一个范围不能保持这个总和.

DECIMAL罐.

从1到99999的所有值之和为4999950000,最大INT值为2147483647,小于总和最终值的一半.

当你总结INT时,你得到一个新的INT.当你对DECIMAL求和时,你得到一个新的DECIMAL,所以输入类型定义了输出类型.

您可以切换到使用bigint,它应该"很好".

此外,在第二个注释,请不要将数字存储为文本!