SQL Server 2008 身份 key 自动递增问题

标签 sql sql-server-2008

我最近不得不将数据库(sql server 2008)移动到另一台服务器,我注意到在其中一个表中,标识列的值开始出现一些意外值。它设置为标识增量为 1 和标识种子为 1 的标识列。在每大约 10 个连续条目之后,它将从另一个更高的数字开始,并在接下来的 10 个左右的条目中增加 1,然后跳到另一个更高的数字。我似乎无法弄清楚这个问题。

抱歉外行语言。我不是数据库人。

最佳答案

这可能不是您的身份 key 的问题,而是用于插入数据的框架或 SP 的问题。如果您有一个插入数据但随后被回滚的存储过程,则 ID 被保留但该行被“删除”。

所以有两个地方需要检查:一个关于您正在使用的框架(NHibernate 或 Entity Framework 等?)...这些框架可能会插入行然后删除它们。第二个要检查的地方是 SPROC 中的 INSERT 语句和您可能期望 ROLLBACK 的其他地方。

参见:SQL Identity (autonumber) is Incremented Even with a Transaction Rollback

另一个问题是您可能只是检查数据而不对其进行排序?当您移植数据时,您假设它总是按 ID 顺序插入或检索。但是因为新表没有以相同的方式“索引”,所以您不一定会以主键顺序看到项目。如果行在大多数时间显示为连续且有间隙,则这种情况不太可能发生,但值得一提。

关于SQL Server 2008 身份 key 自动递增问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13995265/

相关文章:

sql - "Between"运算符在使用参数时生成错误的查询计划

PHP 和 MySQL 计数器

sql - 批量插入问题

sql - 在 SSIS 中编写自定义日志提供程序

列名包含 & 的 SQL 查询

MYSQL 对具有唯一结果的列求和

sql - 甲骨文 TO_DATE 不工作

sql-server - SQL Server 2008磁盘使用问题

sql-server-2008 - 来自 aspnet_regsql 的意外错误消息

php - mysql update a table from another 1 to 1 表