sql-server - 列中的循环 IDENTITY 编号

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

是否可以强制 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/

相关文章:

php - 选择数据并在所选记录中查找重复值的sql查询

c# - 尝试通过应用而非 Management Studio 连接时登录失败

SQL Server 2012 - 生成脚本 - 保存到文件 = 不运行

sybase - 将现有的 int 列更改为 sybase 中的标识

sql-server - 基于每日货币汇率的 SSAS 总和衡量标准

sql-server - Visual Studio 社区 : how to view data or run SQL in the "SQL Server Object Explorer"

sql-server - 如何以编程方式确定哪些 SQL 表具有标识列

sql-server - SQL Server 截断表后继续标识计数

sql - 仅从表中删除 500 行

sql - 如何为sql server 2012中另一个表中的每个父主键为一个表选择给定数量的行?