Sql server 列中的循环标识号

Sql server 列中的循环标识号,sql-server,sql-server-2012,identity-column,Sql Server,Sql Server 2012,Identity Column,当标识列达到定义的数据类型的最大值时,是否可以强制标识列重新计算其种子属性,以填补ID中的空白 这样说吧,我有一列TINYINT数据类型,它最多可以保存255个值。当列被数据填充到可能的最大ID时,我从中间删除一行,比如说ID=100 问题是,我是否可以强制标识在结尾处填充缺少的ID?是的,您可以这样做: set identity_insert on; insert into table(id) value(100) --引爆 set identity_insert off; 您可以为标识重

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

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

问题是,我是否可以强制
标识
在结尾处填充缺少的ID?

是的,您可以这样做:

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

set identity_insert off;

您可以为
标识重新设定种子(设置新种子),但它将无法神奇地找到缺少的值

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

因此,总而言之,重新设定一个
身份
确实不是一个好主意。。。。只需选择一个足够大的数据类型即可满足您的需要

使用类型
INT
,从1开始,可以得到20多亿行——对于绝大多数情况来说,这应该足够了。通过
BIGINT
,你可以得到大约922万亿(922万亿,15个零-9222万亿)-足够你用了吗

如果使用从1开始的
INT标识,并且每秒插入一行,则需要66.5,才能达到20亿的上限

如果您使用从1开始的
BIGINT标识
,并且每秒插入1000行,那么在达到922万亿的极限之前,您需要一个令人难以置信的2.92亿年


在中阅读更多关于它的信息(包括所有选项)。

它可以自己完成吗,而不需要我的操作?我知道这是可能的,就像你的方式一样,但我认为这是不允许自动进行的。它不会自行调整。查看更多信息。你可以重新设置
标识(设置新种子),但它将无法神奇地找到缺失的值。。。。。它会从新的种子开始不断地传递新的价值观——这意味着,在某个时刻,与现有价值观的冲突会发生——这不是一个很好的主意……你证实了我的假设:)我只是好奇这是否可能,但你给了我真正的答案。谢谢