是否可以强制 IDENTITY 列在达到定义数据类型的最大值时重新计算其种子属性,以填补 ID 中的空白。
这样说吧,我有一个数据类型为 TINYINT
的列,它最多可以容纳 255 个值。当列中的数据填充到可能的最大 ID 时,我从中删除一行中间,假设 ID = 100
。
问题是,我可以强制 IDENTITY
填写最后缺少的 ID 吗?
最佳答案
您可以重新为IDENTITY
设置种子(设置新种子),但它不能能够神奇地找到缺失值。 ...
重新播种的 IDENTITY
列将继续从新种子开始分发新值 - 这意味着,在某个时候,迟早会发生与现有值的冲突
因此,总而言之,重新播种 IDENTITY
确实不是一个好主意....只需选择一个足够大的数据类型来满足您的需求即可。
对于 INT
类型,从 1 开始,您将获得 超过 20 亿 可能的行 - 这对于绝大多数情况来说应该绰绰有余。使用 BIGINT
,您将得到大约 922 千万亿(922 有 15 个零 - 9'220'0000 亿)- 对您来说足够了吗??
如果您使用从 1 开始的 INT IDENTITY
,并且您每秒插入一行,则需要 66.5 年 才能达到20亿极限....
如果您使用从 1 开始的 BIGINT IDENTITY
,并且每秒插入一千行,您需要令人难以置信的2.92 亿年 在你达到 922 千万亿的限制之前....
在 MSDN Books Online 中阅读更多相关信息(包含所有选项) .
关于sql-server - 列中的循环 IDENTITY 编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29514645/