36

SQL Server 中自动增量主键的上限是多少?当 SQL Server 自动增量主键达到其上限时会发生什么?

4

5 回答 5

39

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 很容易,但可能会导致代码库出现问题。

  1. 如果标识列对您无关紧要(它不是外键等),那么您可以重新设置数据库并重置标识列。
  2. 将您的身份列更改为更大的数字。因此,例如,如果您溢出了一个 int,请将您的标识列更改为一个大 int。祝你好运:)

可能还有其他修复,但没有灵丹妙药。我只是希望这不会发生在作为一堆关系中心的表格中,因为如果发生这种情况,您将遭受很多痛苦。这不是一个很难解决的问题,只是一个乏味而漫长的问题。

于 2008-11-04T13:20:53.867 回答
4

这取决于数据类型。如果您使用 bigint,则不太可能溢出。即使是普通的 int 也会给你几十亿行。我从来没有溢出,所以我不能告诉你如果你这样做会发生什么。

于 2008-11-04T13:04:40.420 回答
2

我会告诉你会发生什么......我的数据停止插入到那个特定的表中。数据库仍然有效,但我发现数据丢失且不一致。经过一番研究,我找到了错误表,然后运行了手动插入。错误与上述相同。

不得不将列更改为 BIGINT。在稍慢的服务器上的 26GB 数据库上,大约需要 30 分钟。在数据库的存档版本(150GB 左右)上花费了相当长的时间。

幸运的是,这张桌子没有太多的关系,所以痛苦很轻微。

于 2008-11-24T21:06:33.320 回答
1

DBCC CHECKIDENT (SomeTable, RESEED, 1)

这会将表“SomeTable”上的标识重置为 1

不确定这是否是最好的方法。

于 2008-12-21T21:02:18.900 回答
0

数据类型说明:

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

当您达到上限时,自动增量会达到下限。

于 2008-11-04T13:11:09.097 回答