zoukankan      html  css  js  c++  java
  • 将expression转化为数据类型int时发生算术溢出错误

    在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 中,我进行了测试:

    [xhtml] view plain copy
     
    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

  • 相关阅读:
    修改mysql的时间/时区
    vue 3.0一些理解
    关于css中常用几种选择器的整理
    docker中MySQL8.0登录提示caching_sha2_password问题解决方法
    java请求url返回json
    weblogic11G 修改密码
    每天一个小知识
    出一套柠檬班测试开发视频(百度网盘)
    JAVA自动化,使用UIAutomator定位
    JAVA自动化,解决Appium无法输入中文问题
  • 原文地址:https://www.cnblogs.com/gered/p/9131966.html
Copyright © 2011-2022 走看看