SQL Server中自动增量主键的上限是多少? 当SQL Server自动增量主键达到其上限时会发生什么?
答案 0 :(得分:37)
Joel的回答是正确的,它是您使用的任何数据类型的上限。
以下是其中两个例子:
我实际上已经达到了我工作的工作的极限。实际错误是:
Msg 8115, Level 16, State 1, Line 1 Arithmetic overflow error converting IDENTITY to data type int. Arithmetic overflow occurred.
我有几点可以解决这个问题,我可以想到这一点。数字1可能很难而且不太可能,数字2很容易,但可能会导致代码库出现问题。
可能还有其他修复,但没有灵丹妙药。我只是希望这不会发生在一堆关系的中心表中,因为如果确实如此,那你就会遭受很多痛苦。这不是一个难以解决的问题,只是一个乏味而冗长的问题。
答案 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
不确定这是否是最好的方法。