0

我有一个表,其中有一个身份列 requestID。我已将自动增量和种子值都设置为 1。 requestId 按预期增加。但它显示了一种意想不到的行为。例如,如果今天的最后一个增量是 500,则第二天的标识从 1001 开始。如何解决这个问题?

4

3 回答 3

1

在 SQL 2012 中,标识列在内部使用带有 CACHE 的序列来生成值。虽然这提高了性能,但它有一个副作用:意外关闭会导致序列中的间隙。没有什么可以防止这种情况发生。微软官方的指导是应用程序不应该依赖于标识值是顺序的。“意外”关闭包括断电、Windows 重新启动以及使用 NET STOP 停止 SQL Server 实例。

于 2013-07-05T06:29:12.957 回答
0

为什么这是个问题?很可能有 500 次尝试插入某些东西,但都失败了。存储连续数字不是必须的(也不是 autoinc 列的意图)。它的目的是提供唯一的数字,其中每个新数字都大于前一个数字,从而在插入序列上给出排序顺序。

于 2013-07-05T05:29:35.790 回答
0

您可以每天运行以下命令:

DBCC CHECKIDENT ("dbo.MyTable", RESEED, 0);

我假设您正在尝试每天跟踪请求的数量,但是如果任何插入失败,您可能会看到计数问题,即您的数字可能存在差距。

IMO 最好不要每天重置该字段并将插入时间存储到新记录的列中。然后您可以按日期查询并获得计数。

于 2013-07-05T05:34:26.277 回答