SQL Server中自动增量主键的上限

时间:2008-11-04 13:02:51

标签: sql sql-server auto-increment

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

5 个答案:

答案 0 :(得分:37)

Joel的回答是正确的,它是您使用的任何数据类型的上限。

以下是其中两个例子:

  • int:2 ^ 31-1(2,147,483,647)
  • bigint:2 ^ 63-1(9,223,372,036,854,775,807)

我实际上已经达到了我工作的工作的极限。实际错误是:

    Msg 8115, Level 16, State 1, Line 1
    Arithmetic overflow error converting IDENTITY to data type int.
    Arithmetic overflow occurred.

我有几点可以解决这个问题,我可以想到这一点。数字1可能很难而且不太可能,数字2很容易,但可能会导致代码库出现问题。

  1. 如果标识列对您无关紧要(它不是外键等),那么您可以重新设置数据库并重置标识列。
  2. 将您的标识列更改为更大的数字。因此,例如,如果您已经溢出了一个int,请将您的标识列更改为一个大的int。祝好运满溢:)
  3. 可能还有其他修复,但没有灵丹妙药。我只是希望这不会发生在一堆关系的中心表中,因为如果确实如此,那你就会遭受很多痛苦。这不是一个难以解决的问题,只是一个乏味而冗长的问题。

答案 1 :(得分:4)

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

答案 2 :(得分:2)

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

必须将列更改为BIGINT。在一个有点慢的服务器上的26GB数据库上,花了大约30分钟。在数据库的存档版本(150GB左右)上花了相当长的时间。

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

答案 3 :(得分: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

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

答案 4 :(得分:1)

DBCC CHECKIDENT(SomeTable,RESEED,1)

这会将表格'SomeTable'上的身份重置为1

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