是否可以强制IDENTITY列重新计算其种子属性,当它达到已定义数据类型的最大值时,填补ID的空白。
这样说,我有一列TINYINT
数据类型可以保存最多255个值。当列填充数据到最大ID时,我从中间删除一行,让我们说ID = 100
。
问题是,我可以强制IDENTITY
填写最后遗失的ID吗?
答案 0 :(得分:2)
是的,你可以这样做:
set identity_insert on;
insert into table(id) value(100)
- 将其关闭
set identity_insert off;
答案 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万亿的限制......