SQL Server的自动增量功能

时间:2012-11-07 16:48:05

标签: sql sql-server sql-server-2008 sql-server-2005

我创建了一个名为ABC的表。它有三列如下: -

enter image description here

number_pk (int)是我的表格的主键,其中我已为该列启用了auto increment功能。

现在我已从该表中删除了两行Number_pk= 5Number_pk =6

我现在得到的表是这样的: -

enter image description here

现在,如果我再次在此表中输入两个具有相同值的新行,我将得到两个新的Number_pk starting from 7 and 8,即

enter image description here

我的问题是,自从我从表中删除了两行后,这背后的逻辑是什么。我知道一个简单的答案是因为我已经为我的表的主键设置了自动增量。但我想知道有没有办法可以在不改变我的表格设计的情况下从最后一个Number_pk开始插入两个新条目?

SQL Server如何管理此记录,因为我已从数据库中删除了行?

2 个答案:

答案 0 :(得分:0)

虽然在特定要求之前不应该这样做。

1。)获取最大ID:

Declare @id int
Select @id = Max(Number_pk) From ABC
SET @id = @id + 1;

2。)并重置标识栏:

DBCC CHECKIDENT('ABC', RESEED, @id)

DBCC CHECKIDENT (Transact-SQL)

答案 1 :(得分:0)

逻辑是保证生成的数字是唯一的。 ID字段不一定必须具有含义,而是最常用于标识唯一记录,从而更容易对其执行操作。

如果数据库设计正确,如果外键关系中的任何其他表引用了已删除的ID号,则无法删除它们,从而防止记录以这种方式孤立。

如果您绝对想要输入序列,可以考虑发布RESEED,但正如建议的那样,它不会给您带来太多好处。

身份记录是“受管理的”,因为SQL Server将跟踪已发出的号码,无论它们是否仍然存在。

如果您想删除表中的所有记录,有两种方法可以删除(如果不存在外键关系):

DELETE FROM Table

DELETE只删除记录,但下一个INSERTED值将继续在ID编号左侧。

TRUNCATE TABLE

TRUNCATE实际上将重置表,从而保证它以您最初指定的值(最可能是1)再次启动。