2013-09-28 57 views
0

假設我在數據庫中的ID列:重用刪除ID字段在MSSQL

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>將會改變。 (ID3獲得ID4,ID4獲得ID5,ID5不再存在)。

+0

你爲什麼認爲你必須做這樣的事情? –

回答

4

你問是否有神奇的命令來做到這一點?不是我所聽說過的。 {坦白說,我從來沒有聽到任何人甚至想這樣做}

你問這是否技術上可行?當然。這將是一項重大任務。你可以編寫一個這樣做的程序,但是所有這些改變所有外鍵引用的開銷會非常大,導致...

爲什麼?你期望從中得到什麼? 「空」空間不會受到傷害。你在整數字段中的空間用完了嗎?

0

如果Id列是標識列,那麼您不能讓Sql Server填充缺失的ID作爲其自動增量過程的一部分。它不會這樣做。

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

一般來說,這是不值得的麻煩。

1

總體思路是:UPDATE T SET ID = ID - 1 WHERE ID > 3

您可以自定義這個根據自己的喜好。可能您需要爲此聲明啓用標識插入。

請小心,因爲如果其他數據引用這些ID,這可能會導致損壞。 ID通常不應該改變。也許你寧願添加一個新的列ContiguousID INT NOT NULL,並讓IDENTITY值。