最近我在玩 SQL Server 数据类型和表中的大量数据,并试图找出 Varchar 和数字数据的性能。但是,我遇到了一些我认为不应该出现的错误,但确实如此。我的问题如下:
我有一张 table :
create table sa(f1 varchar(100))
我有一个向表中插入 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
我测试了以下内容:
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
但是,当我对 Converting F1 to Int 求和时,它显示错误。
但是,当我只选择 Converting to Int 时就没问题了。
而且,当我将 Converting F1 to decimal 求和时,它工作正常。
SUM函数的数据类型是什么?
在上述数据上,它适用于 Decimal 而不是 Int?
为什么?
我遇到以下错误
将表达式转换为数据类型 int 时出现算术溢出错误。
最佳答案
您求和为 INT
,它的范围不能容纳该总和。
DECIMAL
可以。
从 1 到 99999 的所有值的总和是 4999950000,最大 INT 值是 2147483647,不到总和的一半。
当您对 INT 求和时,您将得到一个新的 INT。当您对 DECIMAL 求和时,您会得到一个新的 DECIMAL,因此输入类型定义了输出类型。
您可以改为使用 bigint
,它应该“没问题”。
另外,请注意,请不要将数字存储为文本!
关于具有 Int 和 Decimal 转换的 SQL Server SUM 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17946902/