-1

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

在此处输入图像描述

该列number_pk (int)是我的表的主键,我在其中auto increment为该列创建了该功能。

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

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

在此处输入图像描述

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

在此处输入图像描述

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

自从我从数据库中删除了行后,SQL Server如何管理这条记录?

4

2 回答 2

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)

于 2012-11-07T16:56:32.283 回答
0

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

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

如果您绝对想要条目序列,您可以考虑发布 a RESEED,但正如建议的那样,它不会真正给您带来太多优势。

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

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

DELETE FROM Table

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

TRUNCATE TABLE

TRUNCATE实际上会 RESEED 表,从而保证它以您最初指定的值(很可能是 1)重新开始。

于 2012-11-07T16:58:21.890 回答