在生产部署后,神奇地增加了列ID

时间:2014-01-27 06:37:13

标签: c# asp.net sql sql-server-2008 sql-server-2008-r2

我有一个奇怪的问题,我将我的应用程序部署到生产中。申请工作正常。我也用一些本地数据上传了数据库。一天后,数据库ID增加10000.我不知道为什么以及如何。见下图。蓝色来自当地环境,黄色来自生产。

此外,当我连接到生产服务器并尝试打开任何表进行编辑时,我收到错误:

  

不支持此后端版本来设计数据库图表或表。 (MS Visual Database Tools)

如果这个增量有些怎么连接到这个?

enter image description here

2 个答案:

答案 0 :(得分:0)

似乎微软认为这是一个“功能”,而不是一个错误。根据我发现解释它的站点,SQL Server将在重新启动服务器时执行此操作(可能是为了防止重复的ID?),并且增量的大小取决于列的数据类型,因此INT字段将跳过1,000并且BIGINT将跳过10,000。

请阅读此处以获取更多信息,但基本上如果您关心身份列的价值,请注意不要使用标识列,而是创建一系列数字。

http://www.codeproject.com/Tips/668042/SQL-Server-2012-Auto-Identity-Column-Value-Jump-Is

答案 1 :(得分:0)

SQL Server 2012具有与SEQUENCE共享的新身份实现。这种不幸的行为是故意的。

Enable trace flag 272 on startup.

  

使用跟踪标志272.这将导致日志记录   为每个生成的标识值生成。的表现   打开此跟踪标志可能会影响身份生成。 •
  使用带有NO CACHE的序列生成器   设置(http://msdn.microsoft.com/en-us/library/ff878091.aspx)o这个   将导致为每个生成的序列生成日志记录   值。注意,序列值生成的性能可以是   使用NO CACHE影响。

不要依赖身份值来连续。尽管如此,这些大跳跃在很多方面都很烦人。