【问题标题】:Arithmetic overflow error算术溢出错误
【发布时间】:2016-09-16 20:22:32
【问题描述】:

我明白了:

Msg 8115 算术溢出错误将表达式转换为数据类型 int 错误

对于这个查询:

DECLARE @x  int     
IF EXISTS ( SELECT * FROM Y)     
  BEGIN          
    SET @x = (SELECT max(Id )  from Y)+1    
  END    
ELSE 
  BEGIN         
    SET @x = 1   
  END 

我尝试将 Id 转换为 Big int,也尝试将 x 更改为 Big int,但仍然出现相同的错误。

【问题讨论】:

  • 你可以试试declare @x bigint
  • mysql 还是 sql server?
  • 我试过@x bigint 但没用
  • @aks 您是否尝试使用 IDENTITY(1,1) 自动增加 ID 列?
  • max(Id) 是否有可能是 bigint 类型的最大值?

标签: sql-server


【解决方案1】:

我已经试过你的代码没有问题,请参考这个LINK它可能对你有帮助。

【讨论】:

    【解决方案2】:

    检查类型中可以存储的值的范围:

    https://msdn.microsoft.com/en-us/library/ms187746(v=SQL.90).aspx

    https://msdn.microsoft.com/en-us/library/ms187745.aspx

    (还要检查一下:SQL Server BIGINT or DECIMAL(18,0) for primary key

    decimal 类型的 ID 列可能会导致您的情况出现问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多