【发布时间】:2014-06-25 17:23:27
【问题描述】:
将 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)
【问题讨论】:
-
请显示您的插入代码,最好是表模式。
-
将数据类型更改为 long ?
-
仅仅因为最大 id 是一个值并不意味着它与要分配的下一个身份有关。通过执行以下命令检查最后一个是什么:SELECT IDENT_CURRENT('table')
-
我在网上发现了这一点 (dbforums.com/microsoft-sql-server/…),截断表并不一定会重置标识列的种子,由此产生的问题会导致这种误导性错误。该问题已通过重新播种表得到解决,但我不知道这种情况是否适用于您的情况。
-
如果 M_ID 被定义为标识列,则根本不要插入该值。 SQL Server DB 将自动呈现下一个值。所以...
insert into table (from_zip, to_zip) values ('98565', '96552')你为什么要控制数据库设置的身份值?
标签: sql sql-server ssms