假设我在数据库中有一个ID列:
我想删除第3行:
现在我的数据库中的Id正在跟随:
问题:是否可以重复使用(在本例中)ID 3字段。 ID 4会跳到ID 3字段吗?所以数据库应该是这样的:
我也知道RESEED命令DBCC CHECKIDENT (MyTable, RESEED, desiredIDNumber)
,但我不认为我需要这个。从(在我的情况下)2>中取出所有ID将改变。 (ID3获取ID4,ID4获取ID5。ID5不再存在)。
答案 0 :(得分:4)
您是否在询问是否有神奇的命令来执行此操作?不是我听说过的。 {坦白说我以前从未听过有人想要这样做}
您是否在询问技术上是否可行?当然。这将是一项重大任务。您可以编写一个执行此操作的程序,但所有可用于更改所有外键引用的开销将会非常大,从而导致......
为什么呢?你有什么期望摆脱这个? “空”空间不会受到伤害。你是否在整数字段中耗尽了空间?
答案 1 :(得分:1)
一般的想法是:UPDATE T SET ID = ID - 1 WHERE ID > 3
您可以根据自己的喜好自定义此项。可能您需要为此语句启用标识插入。
请注意,因为如果其他数据引用这些ID,这可能会导致损坏。 ID通常不应该改变。也许您更愿意添加新列ContiguousID INT NOT NULL
并单独使用IDENTITY
值。
答案 2 :(得分:0)