【发布时间】:2010-09-20 16:21:04
【问题描述】:
SQL Server 中自增主键的上限是多少? 当 SQL Server 自动增量主键达到其上限时会发生什么?
【问题讨论】:
标签: sql sql-server auto-increment
SQL Server 中自增主键的上限是多少? 当 SQL Server 自动增量主键达到其上限时会发生什么?
【问题讨论】:
标签: sql sql-server auto-increment
乔尔的回答是正确的,它是你使用的任何数据类型的上限。
这是其中两个的示例:
我实际上已经达到了我所从事的工作的极限。实际错误是:
消息 8115,第 16 级,状态 1,第 1 行 将 IDENTITY 转换为数据类型 int 的算术溢出错误。 发生算术溢出。我能想到几个解决方法。数字 1 可能非常困难且不太可能,数字 2 很容易,但可能会导致代码库出现问题。
可能还有其他修复方法,但没有灵丹妙药简单的方法。我只是希望这不会发生在作为一堆关系中心的表格中,因为如果发生这种情况,您将遭受很多痛苦。这不是一个很难解决的问题,只是一个乏味而冗长的问题。
【讨论】:
这取决于数据类型。如果您使用 bigint,则不太可能溢出。即使是普通的 int 也会给你几十亿行。我从来没有溢出,所以我不能告诉你如果你这样做会发生什么。
【讨论】:
我会告诉你会发生什么......我的数据停止插入到那个特定的表中。数据库仍然有效,但我发现数据丢失且不一致。经过一番研究,我找到了错误表,然后运行了手动插入。错误同上。
必须将列更改为 BIGINT。在稍慢的服务器上的 26GB 数据库上,大约需要 30 分钟。在数据库的存档版本(150GB 左右)上花费了相当长的时间。
幸运的是,这张表没有太多的关系,所以痛苦很轻微。
【讨论】:
DBCC CHECKIDENT (SomeTable, RESEED, 1)
这会将表 'SomeTable' 上的标识重置为 1
不确定这是否是最好的方法。
【讨论】:
数据类型说明:
BIGINT Integer data from -2^63 through 2^63 - 1
INT Integer data from -2^31 through 2^31 - 1
SMALLINT Integer data from -2^15 through 2^15 - 1
TINYINT Integer data from 0 through 255
当你达到上限时,自动增量会达到下限。
【讨论】: