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

我想删除第 3 行:

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

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

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

我想删除第 3 行:

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

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

我也知道 RESEED command DBCC CHECKIDENT (MyTable, RESEED, desiredIDNumber),但我认为我不需要这个。因为(在我的情况下)2> 中的所有 ID 都会改变。(ID3 得到 ID4,ID4 得到 ID5。ID5 不再存在)。
你问是否有一个神奇的命令来做到这一点?不是我听说过的。{坦率地说,我以前从未听说有人甚至想这样做}
你问这在技术上是否可行?当然。这将是一项重大的事业。您可以编写一个程序来执行此操作,但是更改所有外键引用的所有工作的开销将非常巨大,这会导致...
为什么?你期望从中得到什么?“空”的空间不会受到伤害。您是否用完了整数字段中的空间?
一般的想法是:UPDATE T SET ID = ID - 1 WHERE ID > 3
您可以根据自己的喜好自定义它。可能您需要为此语句启用身份插入。
请小心,因为如果其他数据引用这些 ID,这可能会导致损坏。ID 通常不应该更改。也许您宁愿添加一个新列ContiguousID INT NOT NULL,而不管IDENTITY值。
如果 Id 列是标识列,则无法让 Sql Server 在其自动递增过程中填写缺失的 ID。它不会这样做。
您可以使用SET IDENTITY_INSERT命令自己填写 ID。
一般来说,这不值得麻烦。