我正在努力解决一个非常奇怪的问题。提前感谢您阅读我的问题并帮助我。
我们最近推出了一款移动应用程序。我们使用 WCF网络服务和实体框架。我们使用 Sql server express 2014 作为数据库。
现在我们有一个用户表,用于存储用户的基本详细信息。 我们在此表中有一个自动增量列,它也是主键。
自动增量列的预期行为是新用户注册时,列值应增加1个单位,一般情况下就是这样。
一旦我们的数据库中有175个用户,然后当新用户注册时," USERID"的新值专栏跳到1169 !!!
请参阅以下数据库表的屏幕截图。
然后,再次开始递增1个单位,如1169,1170,1171 .....
现在上面的问题在USERID 1296之后再次发现..请参阅下面我们数据库表的屏幕截图。
谢谢,
Ronak
答案 0 :(得分:0)
如果可能,请尝试Truncate Table
重置表格的ID ID。 (小心,因为您将丢失表格数据)。
参考:https://msdn.microsoft.com/es-es/library/ms177570.aspx
其他方法是尝试使用DBCC CHECKIDENT
答案 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