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的算术溢出错误.
你总结的是INT有一个范围不能保持这个总和.
该DECIMAL罐.
从1到99999的所有值之和为4999950000,最大INT值为2147483647,小于总和最终值的一半.
当你总结INT时,你得到一个新的INT.当你对DECIMAL求和时,你得到一个新的DECIMAL,所以输入类型定义了输出类型.
您可以切换到使用bigint,它应该"很好".
此外,在第二个注释,请不要将数字存储为文本!
| 归档时间: |
|
| 查看次数: |
53523 次 |
| 最近记录: |