2016-08-01 50 views
1

当通过vb代码运行时,发生将IDENTITY转换为数据类型int的算术溢出错误。但是当我执行存储过程时,数据被正确插入。将IDENTITY转换为数据类型的算术溢出错误int

通过应用程序有时也有效,有时它不会。

当我检查当前标识值和当前列值是不同的。这是否属于问题。

请让我知道如何解决它。

+1

请粘贴确切的错误消息和一些示例表架构 – TheGameiswar

+0

那么是IDENTITY和int?检查表格定义。显示你的VB代码。 – Paparazzi

回答

1

2147483647INT的最大尺寸,因此您的IDENTITY大于此值。如果您的IDENTITY不会超过9223372036854775807,您可以使用BIGINT来解决您的错误。

+0

它没有穿过最大INT值。数据来自MQ ..我经过一段时间的数据处理后停止了MQ连接。在它达到0.我再次连接它显示相同的错误。我注意到当前列值和当前身份值是不同的,有些时候这两个变得相同。我假设当两者都相同时流程正在发生。 –

0

你正在使用哪个版本的VB?你使用变量类型'long'来返回返回值吗?在VB 6和int之前,值是非常有限的,在.net中它仍然被限制为只包含大约10位数字。

我会确保你使用的是“长”在VB

0

您可以使用此:

DBCC CHECKIDENT('dbo.TableName',reseed,0) 

它补种0

+1

你能否更新你的答案并解释你在做什么?提前谢谢了 – MZaragoza

0

像其他人说,你的列是更大比类型的range allowed大。

您可以像其他人所说的那样使用DBCC CHECKIDENT('dbo.TableName',reseed,0)来种子,但如果您尝试to reuse a value that has already been used,则可能导致错误。

假设该列是一个自动增量标识列,并且行计数低于数据类型范围,则可以重新插入所有值。

  1. 创建一个备份表
  2. 插入到备份表中的所有条目
  3. 截断原始表
  4. 插入从备份表中的所有条目
  5. 删除备份表

这将取决于在你的限制之下,可能比它值得的更困难。

相关问题