SQL Server 2012中身份标识增加了10000

5
我正在使用godaddy共享托管和SQL Server。有两个表(usertbl,patienttble),其主键自动递增1。我正在使用LINQ to SQL类进行数据库操作。
问题是在将uid(来自usertbl的主键)添加为1443之后,SQL Server添加了下一个行uid为11443,而在patienttble中,前一个id是1439,在添加下一行时,id为11439。我无法理解这是如何发生的。在此问题发生之前和之后,两个表中的id都按正确方式递增了1。
1个回答

1
SQL Server不能保证标识字段中没有间隙,这也是Books online告诉您的内容:
连续值在服务器重新启动或其他故障后 - 为了提高性能,SQL Server可能会缓存标识值,并且在数据库故障或服务器重新启动期间可能会丢失一些分配的值。这可能导致插入时标识值中出现间隙。如果不接受间隙,则应用程序应使用自己的机制生成键值。使用具有NOCACHE选项的序列生成器可以将间隙限制在从未提交的事务中。
如上所述,使用带有NOCACHE的SEQUENCES可能是足够好的替代方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接