假設我在數據庫中的ID列:重用刪除ID字段在MSSQL
我想刪除行數3:
現在的Id在我的數據庫如下:
問題:是否有可能重用(在這種情況下)ID 3字段。所以ID 4跳轉到ID 3字段?因此,數據庫應該是這樣的:
我也知道RESEED命令DBCC CHECKIDENT (MyTable, RESEED, desiredIDNumber)
,但我不認爲我需要這在我的情況。從(在我的情況下)2>將會改變。 (ID3獲得ID4,ID4獲得ID5,ID5不再存在)。
假設我在數據庫中的ID列:重用刪除ID字段在MSSQL
我想刪除行數3:
現在的Id在我的數據庫如下:
問題:是否有可能重用(在這種情況下)ID 3字段。所以ID 4跳轉到ID 3字段?因此,數據庫應該是這樣的:
我也知道RESEED命令DBCC CHECKIDENT (MyTable, RESEED, desiredIDNumber)
,但我不認爲我需要這在我的情況。從(在我的情況下)2>將會改變。 (ID3獲得ID4,ID4獲得ID5,ID5不再存在)。
你問是否有神奇的命令來做到這一點?不是我所聽說過的。 {坦白說,我從來沒有聽到任何人甚至想這樣做}
你問這是否技術上可行?當然。這將是一項重大任務。你可以編寫一個這樣做的程序,但是所有這些改變所有外鍵引用的開銷會非常大,導致...
爲什麼?你期望從中得到什麼? 「空」空間不會受到傷害。你在整數字段中的空間用完了嗎?
如果Id列是標識列,那麼您不能讓Sql Server填充缺失的ID作爲其自動增量過程的一部分。它不會這樣做。
您可以使用SET IDENTITY_INSERT命令自己填寫ID。
一般來說,這是不值得的麻煩。
總體思路是:UPDATE T SET ID = ID - 1 WHERE ID > 3
您可以自定義這個根據自己的喜好。可能您需要爲此聲明啓用標識插入。
請小心,因爲如果其他數據引用這些ID,這可能會導致損壞。 ID通常不應該改變。也許你寧願添加一個新的列ContiguousID INT NOT NULL
,並讓IDENTITY
值。
你爲什麼認爲你必須做這樣的事情? –