0

假设我在数据库中有一个 ID 列:

在此处输入图像描述

我想删除第 3 行:

在此处输入图像描述

现在我的数据库中的 ID 如下:

在此处输入图像描述

问题:是否可以重用(在这种情况下)ID 3 字段。那么 ID 4 跳转到 ID 3 字段?所以数据库应该是这样的:

在此处输入图像描述

我也知道 RESEED command DBCC CHECKIDENT (MyTable, RESEED, desiredIDNumber),但我认为我不需要这个。因为(在我的情况下)2> 中的所有 ID 都会改变。(ID3 得到 ID4,ID4 得到 ID5。ID5 不再存在)。

4

3 回答 3

4

你问是否有一个神奇的命令来做到这一点?不是我听说过的。{坦率地说,我以前从未听说有人甚至想这样做}

你问这在技术上是否可行?当然。这将是一项重大的事业。您可以编写一个程序来执行此操作,但是更改所有外键引用的所有工作的开销将非常巨大,这会导致...

为什么?你期望从中得到什么?“空”的空间不会受到伤害。您是否用完了整数字段中的空间?

于 2013-09-28T11:42:07.827 回答
1

一般的想法是:UPDATE T SET ID = ID - 1 WHERE ID > 3

您可以根据自己的喜好自定义它。可能您需要为此语句启用身份插入。

请小心,因为如果其他数据引用这些 ID,这可能会导致损坏。ID 通常不应该更改。也许您宁愿添加一个新列ContiguousID INT NOT NULL,而不管IDENTITY值。

于 2013-09-28T11:38:58.417 回答
0

如果 Id 列是标识列,则无法让 Sql Server 在其自动递增过程中填写缺失的 ID。它不会这样做。

您可以使用SET IDENTITY_INSERT命令自己填写 ID。

一般来说,这不值得麻烦。

于 2013-09-28T11:38:50.433 回答