在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. declare @a int
  2. , @b int
  3. , @c bigint
  4. set @a = 1000000000
  5. set @b = 2000000000
  6. --1.
  7. set @c = @a + @b
  8. --2.
  9. --set @c = cast( @a as bigint)  + cast( @b as bigint)
  10. --3.
  11. --set @c = convert(numeric(20,0),@a) + convert(numeric(20,0),@b)
  12. select @c

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

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

转自:https://blog.csdn.net/spring21st/article/details/5345338

将expression转化为数据类型int时发生算术溢出错误的更多相关文章

  1. 将 expression 转换为数据类型 int 时发生算术溢出

    将 expression 转换为数据类型 int 时发生算术溢出错误 2种快速处理方法 1.CONVERT(bigint, 字段名): 2.Cast(字段名 as decimal(18,2)): 这个 ...

  2. sql servel 报错:将 expression 转换为数据类型 int 时出现算术溢出错误。

    执行sql语句:SELECT   AVG( DATEDIFF(s,s.CreatedDate,s.SendDate)  ) AS submitTime FROM dbo.SmsSend AS s    ...

  3. 将 IDENTITY 转换为数据类型 int 时出现算术溢出错误。

    IDENTITY标识列为int类型,取值范围为-2^32到2^31-1.当增长值超过这个最大值时,我在SQL Server 2008 R2 x64上试验的结果是: 将 IDENTITY 转换为数据类型 ...

  4. 将 numeric 转换为数据类型 numeric 时出现算术溢出错误

    保存数据时控制台报错: Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 将 numeric 转换为数据类型 numeric 时出 ...

  5. numeric 转换为数据类型 (null) 时出现算术溢出错误

    mssql数据同步到mysql时提示错误如下: 消息 8115,级别 16,状态 14,第 1 行 将 numeric 转换为数据类型 (null) 时出现算术溢出错误 问题分析如下: 1.数据字段类 ...

  6. 将float转换为数据类型numeric时出现算术溢出错误

    今天修改数据库字段类型,把float转换成decimal类型. 找了好多资料都没从根本上解决问题.多亏了下面的这个blog http://blog.csdn.net/wangchao1982/arti ...

  7. AIO5销售发货单numeric算数溢出报错:将numeric转换成数据类型numeric时出现算数溢出错误

    问题描述: 销售发货单报错算数溢出:将numeric转换成数据类型numeric时出现算数溢出错误.具体如下图: 当销售发货单的数量为>7万时,报错 当销售发货单的数量为<7万时,单据正常 ...

  8. ado执行sql查询出现“发送数据流时出现算术溢出”错误

    开发一个数据采集监控系统,比较变态的是有将近2000项数据.根据数据类型分多个表存储.数据库访问层采用ado.最近发现当一条sql一次性查询1700多个字段数据后就出现“发送数据流时出现算术溢出”错误 ...

  9. 在将 varchar 值 '1,2,3,4,5,6,7,8' 转换成数据类型 int 时失败。

    alter PROCEDURE PrTradingDelete ) AS BEGIN WHERE id in(@id) END GO 执行上面这个存储过程会异常.提示 :在将 varchar 值 '1 ...

随机推荐

  1. c++ vs 快捷方式

    强迫智能感知:Ctrl+J: 强迫智能感知显示参数信息:Ctrl-Shift-空格: Ctrl+E,D ----格式化全部代码 Ctrl+A+K+F Ctrl+E,F ----格式化选中的代码 Ctr ...

  2. 让Flask-admin支持markdown编辑器

    前言 flask-admin 算是一个很不错的 flask 后台管理了,用它来做博客系统的管理后端再合适不过了,节约时间成本,避免重复造轮子,但是作为一个程序员,写文章怎么可以没有 markdown ...

  3. iftop、ifstat详解

    ifstat 介绍 ifstat工具是个网络接口监测工具,比较简单看网络流量 实例 默认使用 #ifstat eth0 eth1 KB/s in KB/s out KB/s in KB/s out 0 ...

  4. mysql中参数--init-file的作用是什么呢?

    需求描述: 今天在修改测试环境mysql数据库中root用户密码的时候,用到了--init-file参数, 所以,就在这里说下该参数的作用. 概念解释: 参数:--init-file=file_nam ...

  5. java总结(1)——java的特点

    之前学习java仅仅是单纯的学习,老师要求学习.所以就学习.可是没有细致考虑过java的一些特别之处,比方,我们为什么要学习java而不是其它的语言,它必定有选择它的特点.所以,从如今開始,仅仅有埋头 ...

  6. linux 添加交换分区

    [操作简介] 增加swap分区方法: 1.新建磁盘分区作为swap分区 2.用文件作为swap分区 (操作更简单,我更常用) 下面介绍这两种方法:(都必须用root权限,操作过程应该小心谨慎.)   ...

  7. Hbase的基本认识

    1.使用场景:实时查询交互 说说概念性的东西,方便今后更加深入的理解. HBase是Apache Hadoop中的一个子项目,Hbase依托于Hadoop的HDFS作为最基本存储基础单元,通过使用ha ...

  8. 【RF库Collections测试】Dictionary Should Not Contain Key

    Name:Dictionary Should Not Contain KeySource:Collections <test library>Arguments:[ dictionary ...

  9. hasattr() 、getattr() 、setattr()

    hasattr(object, name) :用于判断一个对象中是否有指定的属性或方法,如果存在返回 True,否则返回 False getattr(object, name, [default]) ...

  10. Java之类型的转换

    1.String 类型转化为 int 类型,需要使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换. int a = Integer.parseInt(st ...