我将列ID设置为IDENTITY with seed且increment = 1,1。但是,它不会从1开始计数。而是从2开始。当我插入下一行时,它设置ID = 7而不是2.为什么会发生这种情况,我该如何解决?
我编写了表格并检查了管理工作室。它实际上是一个IDENTITY(1,1)。
答案 0 :(得分:7)
IDENTITY
不保证一组没有间隙的连续值。如果这是您所需要的,您应该考虑其他事项(例如,滚动您自己的可序列化MAX+1
解决方案)。各种各样的事情都可能造成差距:
答案 1 :(得分:4)
这是设计。 IDENTITY列没有连续保证的保证。
请参阅 Microsoft 对此“错误”报告的回复:Identity Column jumps by Seed value。
Microsoft于2013年1月25日下午3:38发布
感谢您的反馈。这种行为实际上是我们设计的 尽量保证ID的唯一性,而不是确保我们不这样做 有差距。因此,我们确实跳过了一些值,以防万一 方案,以便我们不会意外地遇到任何问题 重复数字。
答案 2 :(得分:0)
即使表是空的,SQL服务器也会记住它使用的最后一个标识。如果您想将其重置为1,请尝试以下操作:
DBCC CHECKIDENT('Customer', RESEED, 0)
答案 3 :(得分:0)
CREATE TABLE Id_Table (
[Id] int IDENTITY(1,1), Value INT);
GO
INSERT INTO Id_Table (Value)
VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
GO
DELETE FROM Id_Table
WHERE ID = 1 OR ID = 3 OR ID = 5 OR ID >7
GO
SELECT * FROM Id_Table
DBCC CHECKIDENT('Id_Table', RESEED, 0) --<-- Reseed to any smallest number
DBCC CHECKIDENT('Id_Table', RESEED) --<-- Reseed without providing any seed value
SQL SERVER消息
Checking identity information: current identity value '10', current column value '0'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Checking identity information: current identity value '0', current column value '7'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
将表重新设置为Zero,然后只执行不带任何种子值的DBCC命令,它会将Identity值重新设置为下一个最高可用标识值。
答案 4 :(得分:0)
实际上解决这个问题非常简单。我使用的是Visual Studio 2013设计器,SQL Server对象资源管理器。在“设计视图”中打开违规表,选择“识别”字段并拉出属性。我只更新了Identity Seed和Increment值,然后单击Update按钮。这为我修好了。
虽然不保证身份增量,但我们已经预计到目前为止输入的最高增量应该加1。