自动增量列值随机变高

时间:2015-05-22 11:45:01

标签: c# sql-server wcf entity-framework-5

我正在努力解决一个非常奇怪的问题。提前感谢您阅读我的问题并帮助我。

我们最近推出了一款移动应用程序。我们使用 WCF网络服务实体框架。我们使用 Sql server express 2014 作为数据库。

现在我们有一个用户表,用于存储用户的基本详细信息。 我们在此表中有一个自动增量列,它也是主键。

自动增量列的预期行为是新用户注册时,列值应增加1个单位,一般情况下就是这样。

一旦我们的数据库中有175个用户,然后当新用户注册时," USERID"的新值专栏跳到1169 !!!

请参阅以下数据库表的屏幕截图。 enter image description here

然后,再次开始递增1个单位,如1169,1170,1171 .....

现在上面的问题在USERID 1296之后再次发现..请参阅下面我们数据库表的屏幕截图。

enter image description here

谢谢,

Ronak

2 个答案:

答案 0 :(得分:0)

如果可能,请尝试Truncate Table重置表格的ID ID。 (小心,因为您将丢失表格数据)。

参考:https://msdn.microsoft.com/es-es/library/ms177570.aspx

其他方法是尝试使用DBCC CHECKIDENT

手动重新设置ID计数器

参考:https://msdn.microsoft.com/es-es/library/ms176057.aspx

答案 1 :(得分:0)

我找到了解决方案。

从SQL Server 2012版本开始,重新启动SQL Server实例时,将跳转表的标识值,实际的跳转值取决于标识列数据类型。如果是整数(int)数据类型,那么跳转值是1000,如果是大整数(bigint),那么跳转值是10000.从我们的应用程序的角度来看,这个增量是不能为所有业务案例特别是当值时接受的向客户展示。这是特殊情况/问题,只有SQL Server 2012和旧版本没有这样的问题。

解决方案

如果我们对这个所谓的功能不感兴趣,那么我们可以做两件事来阻止这种跳跃。

•使用序列 •将-t272注册到SQL Server启动参数

使用序列

首先,我们需要从表中删除Identity列。然后创建一个没有缓存功能的序列,并从该序列中插入数字。以下是代码示例:

Hide   Copy Code
CREATE SEQUENCE Id_Sequence
    AS INT
    START WITH 1
    INCREMENT BY 1
    MINVALUE 0
    NO MAXVALUE
   NO CACHE

将-t272注册到SQL Server启动参数

从您的服务器打开SQLServer配置管理器。在右侧客户端选择SQL Server 2012实例,然后选择“属性”菜单。您将找到一个选项卡式对话框窗口。从那里选择启动参数选项卡并注册-t272。然后再次重新启动SQL Server 2012实例并查看差异:

解决方案来源 - http://www.codeproject.com/Tips/668042/SQL-Server-2012-Auto-Identity-Column-Value-Jump-Is

谢谢,

Ronak