SQL SERVER标识每天更改

时间:2013-07-05 05:22:14

标签: sql-server-2012

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以每天运行following command

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

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

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