将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)
答案 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以处理更大的值