解决"将expression转化为数据类型int时发生算术溢出错误"

本文介绍了在SQLServer中处理int类型数据进行sum操作时出现的算术溢出错误,并提供了解决方案,包括更改数据类型为bigint的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在SQL Server 中,某列的数据都在int范围之内,但是使用sum聚集函数求该列和的时候,出现“将expression转化为数据类型int时发生算术溢出错误”。

 

问题在于定义的数据类型:

 

首先,我们先看看SQL Server 定义的数据类型的长度:

  • bigint   数据类型存储从   -2^63   (-9223372036854775808)   到   2^63-1   (9223372036854775807)   范围内的数字。存储大小为   8   个字节。   
  •      int   数据类型的存储范围是   -2,147,483,648   至   2,147,483,647(每个值需   4   个字节的存储空间)。   
  •      smallint   数据类型的存储范围只有   -32,768   至   32,767(每个值需   2   个字节的存储空间),tinyint   数据类型只能存储   0   至   255   范围内的数字(每个值需   1   个字节的存储空间)。

 

当我们对int类型的数据做sum操作的时候,就有可能发生算术溢出的问题。此时,我们可以采用在做sum操作前,将原有列的数据类型更改为bigint 。

 

SQL 语句: 

1. select   sum(cast(colName   as   bigint))   from   TableName

2. select   sum(convert(numeric(20,0),colName))   from   TableName

 

以上两种方法都是可以的。

 

在SQL Server 2005 中,我进行了测试:

 

 

使用方法1,虽然定义@c为bigint 类型,但是 仍然会出现“Arithmetic overflow error converting expression to data type int.” 错误。

通过方法2 和方法3 ,均可以得到最后结果为 3000000000

 

### Error querying database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 将 expression 转换数据类型 int 出现算术溢出错误。 ### The error may exist in com/je/ibatis/extension/mapper/MetaBaseMapper.xml ### The error may involve !MetaBaseMapper.selectSql ### The error occurred while handling results ### SQL: select sum(XSCL_XSCL) as XSCL_XSCL,sum(XSCL_BHGSLJS) as XSCL_BHGSLJS,sum(XSCL_PLCTDSJJS) as XSCL_PLCTDSJJS,sum(XSCL_ZCYXSJJS) as XSCL_ZCYXSJJS,sum(XSCL_ZGZCSJS) as XSCL_ZGZCSJS,sum(XSCL_GZSJJS) as XSCL_GZSJJS,sum(XSCL_TJRWTZSJJS) as XSCL_TJRWTZSJJS,sum(XSCL_MLGZCSJS) as XSCL_MLGZCSJS,sum(XSCL_MLGZSJ) as XSCL_MLGZSJ,sum(XSCL_SLBFGZCS) as XSCL_SLBFGZCS,sum(XSCL_GW1BFGZCSJS) as XSCL_GW1BFGZCSJS,sum(XSCL_GW1BFGZSJJS) as XSCL_GW1BFGZSJJS,sum(XSCL_GW2BFGZCSJS) as XSCL_GW2BFGZCSJS,sum(XSCL_GW2BFGZSJJS) as XSCL_GW2BFGZSJJS,sum(XSCL_GW3BFGZSJJS) as XSCL_GW3BFGZSJJS,sum(XSCL_GW3BFGZCSJS) as XSCL_GW3BFGZCSJS,sum(XSCL_GW4BFGZCSJS) as XSCL_GW4BFGZCSJS,sum(XSCL_GW4BFGZSJJS) as XSCL_GW4BFGZSJJS,sum(XSCL_GW5BFGZCSJS) as XSCL_GW5BFGZCSJS,sum(XSCL_GW5BFGZSJJS) as XSCL_GW5BFGZSJJS,sum(XSCL_DLSJJS) as XSCL_DLSJJS,sum(XSCL_DLGZCSJS) as XSCL_DLGZCSJS,sum(XSCL_TLBFGZCSJS) as XSCL_TLBFGZCSJS,sum(XSCL_IPOPBLJS) as XSCL_IPOPBLJS,sum(XSCL_OPOPBLJS) as XSCL_OPOPBLJS,sum(XSCL_XQDZBLJS) as XSCL_XQDZBLJS,sum(XSCL_JCDZBLJS) as XSCL_JCDZBLJS,sum(XSCL_XHSFBLJS) as XSCL_XHSFBLJS,sum(XSCL_JWBLJS) as XSCL_JWBLJS,sum(XSCL_LPSLJS) as XSCL_LPSLJS,sum(XSCL_DJQTBLJS) as XSCL_DJQTBLJS,sum(XSCL_followBLJS) as XSCL_followBLJS,sum(XSCL_GAPBLJS) as XSCL_GAPBLJS,sum(XSCL_DZBLJS) as XSCL_DZBLJS from MES_XSCL where 1 = 1 ### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 将 expression 转换数据类型 int 出现算术溢出错误。 ; 将 expression 转换数据类型 int 出现算术溢出错误。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 将 expression 转换数据类型 int 出现算术溢出错误。怎么解决
03-29
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值