我正在开发一个使用C#和SQL Server 2016的项目。
在SQL Server Management Studio中,我将主键添加到现有表中,通过右键单击表并选择设计表,它工作正常。
但是一旦我添加了一些新用户并删除了一些用户,它就开始表现得很奇怪,我的意思是id=4
下一个用户应该id=5
但是它被赋予了id=7
。
SSMS的屏幕截图
答案 0 :(得分:4)
实际上您已删除ID为5和6的用户。自动增量的计数器不会自动重置或反转。这是正常和标准的行为。
答案 1 :(得分:0)
可能已删除Id 5和6的记录
答案 2 :(得分:0)
特别是'重用价值'
'对于具有特定种子/增量的给定标识属性,引擎不会重用标识值。如果特定的insert语句失败或者回滚insert语句,则消耗的标识值将丢失,并且不会再次生成。当生成后续标识值时,这可能导致间隙。 “
希望这有助于解释
答案 3 :(得分:0)
这听起来令人难以置信,但如果你想要一个递增的记录号,SQL Server就不支持你了。回滚或重新启动服务器的事务可能会在数字中留下漏洞。
如果删除一行,则必须手动实现。假设存在记录1,2和3。您删除记录2.新订单应该包含多少个数字?如果你说2,请记住这意味着订单2是在订单3之后创建的,这会让很多人感到困惑。
答案 4 :(得分:0)
可能不仅仅是记录已被删除。每次尝试将null
数据放入该表时,种子都会递增。以一个非常简单的例子为例:
INSERT
希望有所帮助。
答案 5 :(得分:0)
假设您已在SQL Server中使用了身份功能。当您尝试将新记录插入到具有标识列的表中时,即使插入失败,标识值也会增加。
假设在此期间没有发生其他插入,新记录的SeqNo应该是10,但它将是11.
因为如果插入失败,SQL Server将不会回滚身份种子。因此,您必须手动重新播种列
删除和插入的情况相同。我有最大SeqNo为5.I删除了SeqNo 5并插入了一条新记录,但是对于我的新记录,SeqNo将是6(或下一个标识值)
因此,如果要为标识列指定一些值,请尝试使用SET IDENTITY INSERT ON进行插入。像这样
SET IDENTITY INSERT YourTable ON
INSERT INTO YourTable(SeqNo,Name)
VALUES(5,'ABC')
SET IDENTITY INSERT YourTable OFF
答案 6 :(得分:-1)
当我们删除取消时(通过在填写表格中的值时按ESC按钮),它将其作为增量,您可以截断您的表格(
注意:Truncate将删除表格中的所有值
)