在MSSQL中重用已删除的ID字段

时间:2013-09-28 11:33:05

标签: c# asp.net sql-server

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

enter image description here

我想删除第3行:

enter image description here

现在我的数据库中的Id正在跟随:

enter image description here

问题:是否可以重复使用(在本例中)ID 3字段。 ID 4会跳到ID 3字段吗?所以数据库应该是这样的:

enter image description here

我也知道RESEED命令DBCC CHECKIDENT (MyTable, RESEED, desiredIDNumber),但我不认为我需要这个。从(在我的情况下)2>中取出所有ID将改变。 (ID3获取ID4,ID4获取ID5。ID5不再存在)。

3 个答案:

答案 0 :(得分:4)

您是否在询问是否有神奇的命令来执行此操作?不是我听说过的。 {坦白说我以前从未听过有人想要这样做}

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

为什么呢?你有什么期望摆脱这个? “空”空间不会受到伤害。你是否在整数字段中耗尽了空间?

答案 1 :(得分:1)

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

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

请注意,因为如果其他数据引用这些ID,这可能会导致损坏。 ID通常不应该改变。也许您更愿意添加新列ContiguousID INT NOT NULL并单独使用IDENTITY值。

答案 2 :(得分:0)

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

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

一般情况下,这不值得。