插入行时出现“算术溢出”错误

时间:2014-06-25 17:23:27

标签: sql sql-server ssms

将IDENTITY转换为数据类型int的算术溢出错误。

尝试将记录插入到具有656128行的表中时出现此错误。我在此表中的最大ID是1186183.这似乎不会导致此错误的数字。 ID列的类型为int,而不是null。身份,身份增量和身份种子都是真的。

关于可能导致这种情况的任何想法?

insert into table (m_id, from_zip, to_zip)
values (7788, '98565', '96552')

schema
id (int, not null)
m_id (int null)
from_zip (nvarchar(50), null)
to_zip (nvarchar(50), null)

2 个答案:

答案 0 :(得分:2)

只有在下一个标识超出整数限制2147483647时才能看到该错误。

如评论中所述,下一个身份不一定是Max(id)+1。

可能是某人无意中意外地将您的种子值更改为上限。

发出此命令以检查种子值:

DBCC CHECKIDENT (tableName, NORESEED)

你应该看到这样的事情:

  

检查身份信息:当前身份值' 1109',当前   列值' 1109'。

     

DBCC执行完成。如果DBCC打印错误   消息,请与您的系统管理员联系。

如果返回的值不相同,则可能需要重新设置身份...如果返回的第一个值达到极限,那就是您收到错误的原因,并且您肯定需要重新种植。

要重新播种,请使用以下内容将身份设置为max(id)+1。

DBCC CHECKIDENT (tableName, RESEED)

如果要指定下一个种子值,可以使用:

DBCC CHECKIDENT (tableName, RESEED, 123456)

注意:123456是当前种子,因此下一个插入将获得123457。

请在重新播种前阅读此msdn article,并了解对您的业务和数据可能产生的影响。

答案 1 :(得分:1)

您可以查看身份:

select IDENT_CURRENT( 'table_name' )

如果要删除和插入数据,标识值将继续递增。截断将重置表的标识。

如果有意义,您可以将数据类型更改为bigint以处理更大的值

相关问题