SQL Server 中自动增量主键的上限是多少?当 SQL Server 自动增量主键达到其上限时会发生什么?
5 回答
Joel 的回答是正确的,它是您使用的任何数据类型的上限。
这是其中两个的示例:
- 整数:2^31-1 (2,147,483,647)
- 大整数:2^63-1 (9,223,372,036,854,775,807)
我实际上已经达到了我工作的极限。实际错误是:
消息 8115,第 16 级,状态 1,第 1 行 将 IDENTITY 转换为数据类型 int 的算术溢出错误。 发生算术溢出。
我可以想到一些解决方法。数字 1 可能非常困难且不太可能,数字 2 很容易,但可能会导致代码库出现问题。
- 如果标识列对您无关紧要(它不是外键等),那么您可以重新设置数据库并重置标识列。
- 将您的身份列更改为更大的数字。因此,例如,如果您溢出了一个 int,请将您的标识列更改为一个大 int。祝你好运:)
可能还有其他修复,但没有灵丹妙药。我只是希望这不会发生在作为一堆关系中心的表格中,因为如果发生这种情况,您将遭受很多痛苦。这不是一个很难解决的问题,只是一个乏味而漫长的问题。
这取决于数据类型。如果您使用 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
当您达到上限时,自动增量会达到下限。