Sql-Server

如果我刪除我的集群 PK 並添加一個新的,我的行將按什麼順序排列?

  • June 3, 2010

在 SQL Server 中,我正在查看 TableA,它目前有一個 uniqueidentifier 聚集的主鍵。GUID 在任何上下文中都沒有意義。

(我會給你一點時間來清理你的鍵盤和顯示器並放下蘇打水。)

我想刪除該主鍵並向表中添加一個新的唯一整數主鍵。我的問題是:當我刪除索引時,將列從 uniqueidentifier 修改為 int,並將新的聚集唯一主鍵添加到修改後的列中,新的 PK 值是否會按照插入表的順序排列,還是會以其他順序?這是去這裡的正確方式嗎?這行得通嗎?(關於表的創建/修改,我是個菜鳥。)

當您刪除聚集索引時,表將變為堆。由於堆與索引的物理結構非常不同,因此必須將數據複製到新結構中。堆沒有任何順序。當您重新添加新的聚集索引時,數據將從堆中復製到新索引中,並且順序將由新的聚集鍵定義。

如果您想保留現有訂單,那麼您所要做的就是正確分配新的整數 ID:

ALTER TABLE Table ADD Integer_Id INT;
GO

WITH cte AS (
 SELECT ROW_NUMBER() OVER (ORDER BY Guid_Id) as RowOrderByGuid,
   Guid_Id
 FROM Table)
UPDATE t
 SET t.Integer_Id = c.RowOrderByGuid
FROM Table t
JOIN cte c ON t.Guid_Id = c.Guid_Id;

現在 Integer_Ids 的順序將匹配 Guids 的順序。您可以刪除 Guid 列並在新的 Integer 列上添加聚集索引,並保留記錄的物理順序。

引用自:https://serverfault.com/questions/147911