列中的循环IDENTITY编号

时间:2015-04-08 12:28:56

标签: sql-server sql-server-2012 identity-column

是否可以强制IDENTITY列重新计算其种子属性,当它达到已定义数据类型的最大值时,填补ID的空白。

这样说,我有一列TINYINT数据类型可以保存最多255个值。当列填充数据到最大ID时,我从中间删除一行,让我们说ID = 100

问题是,我可以强制IDENTITY填写最后遗失的ID吗?

2 个答案:

答案 0 :(得分:2)

是的,你可以这样做:

set identity_insert on;
insert into table(id) value(100)

- 将其关闭

set identity_insert off;

Identity Insert

答案 1 :(得分:2)

可以重新设定IDENTITY(设置一个新的种子),但能够神奇地找到缺失值.....

重新种植的IDENTITY列将继续从新种子开始分发新值 - 这意味着,在某些时候,迟早会发生与现有值的冲突

因此,总而言之,重新接种IDENTITY确实不是一个好主意....只需选择一个足以满足您需求的数据类型。

对于类型INT,从1开始,您可以获得超过20亿行 - 这对于绝大多数情况来说应该足够了。使用BIGINT,你可以得到大约 922千万亿(922有15个零 - 9' 220&#39,000亿) - 足够你了?

如果您从1开始使用INT IDENTITY,并且每秒插入一行,则在达到20亿限制之前需要66.5 。 ......

如果您从1开始使用BIGINT IDENTITY,并且每秒插入一千行,那么您需要一个令人难以置信的 2.92亿年达到了922万亿的限制......

MSDN Books Online

中详细了解它(包括所有选项)