身份列值突然跳到1001在SQL Server中

我正在使用Sql server 2012(Denali)。 我只是想知道为什么所有的标识列值从1001开始,依此类推。 在开始标识列从1,2开始,依此顺序添加标识,但突然跳到1001,1002以后,包含标识列的数据库中的所有表都跳转到1001,1002。 可能是什么原因。 请协助。

微软已经改变了他们在SQL Server 2012中处理身份值的方式,因此在重新启动SQL服务器实例或服务器机器后,您可以看到logging之间的身份差距。 这个id差距可能还有一些其他原因,这可能是由于在安装更新后自动重启服务器。

您可以使用以下两种select

  • 使用跟踪标志272 o这将导致为每个生成的标识值生成日志logging。 打开此跟踪标志可能会影响身份生成的性能。
  • 使用NO CACHE设置的序列发生器

    在SQL Server 2012上设置您所期望的跟踪标志272

  • 打开“SQL Serverconfigurationpipe理器”

  • 点击左侧窗格中的“SQL Server服务”
  • 右键单击右边的SQL Server实例名称 – >默认值:SQL Server(MSSQLSERVER)
  • 点击“属性”
  • 点击“启动参数”
  • 在“指定启动参数”文本框中键入“-T272”
  • 点击“添加”
  • 确认更改

我相信你在这个连接项目的评论中有解释。 重置身份的故障转移或重新启动结果

为了提高高端机器的性能,我们在2012年引入了身份值的预分配。这个特性可以通过使用TF 272来禁用(那么您将从2008R2中得到该行为)。

身份属性分别存储在元数据中。 如果在身份中使用了一个值并且调用了增量,那么将会设置新的种子值。 没有操作,包括回滚,故障转移,…..可以改变种子值,除了DBCC种子。 故障转移适用于表对象,但不包含标识对象。 因此,对于故障转移,您可以在手动故障转移之前调用检查点,但是您可能会发现计划外情况的差异。 如果差距是一个问题,那么我build议你使用TF 272。

对于控制pipe理器closures,我们有一个修复下一个版本(与另一个TF)。 此修复将处理大多数控制pipe理器closures情况。

我想你可以使用序列,序列给你100%完全的控制,并在许多方面远远优于身份…身份是如此该死的简单和方便

http://msdn.microsoft.com/en-us/library/ff878091.aspx

据我所知,当你做一个身份插入和失败,身份无论如何,validation

与序列,你可以使它“填补”使用周期的差距。 尽pipe艾米·巴瑞特(Amy Barrett)指出这是在交易范围之外产生的。

在使用caching时,性能优化也可能有用。