SQL Server的自增主键上限是多少?当SQL Server自增主键达到上限时会发生什么?
SQL Server的自增主键上限是多少?当SQL Server自增主键达到上限时会发生什么?
乔尔的答案是正确的,它是您使用的任何数据类型的上限。
以下是两个示例:
我曾经在工作中遇到过此限制。 实际错误为:
Msg 8115,级别16,状态1,行1 转换IDENTITY为数据类型int时发生算术溢出错误。 发生算术溢出。我可以想到一些解决方法。 其中方案1可能非常困难,不太可能实现;方案2很容易,但可能会导致代码库出现问题。
- 如果标识列对您没有意义(它不是外键等),则可以重新设置数据库并重置标识列。
- 将标识列更改为更大的数字。 因此,例如,如果已经溢出int,则将标识列更改为bigint。 祝您溢出成功 :)
可能还有其他解决方法,但没有魔法子弹的简单方法。 我只希望这不会发生在一张涉及许多关系的表格中,因为如果是这样,您将面临很多痛苦。 这不是一个难以解决的问题,只是一个漫长而乏味的问题。
这取决于数据类型。如果你使用bigint,你很难溢出。即使是普通的int也能提供几十亿行。我从来没有溢出过,所以无法告诉你如果溢出会发生什么。
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
当达到上限时,自增会回到下限。