2011-01-29 45 views
1

我爲int的標識字段的表,我有以下數據重組標識字段

ID  Name 
------------- 
1  Item1 
4  Item2 
9  Item3 
.... 

我要重新排序我的身份申請喜歡

1 Item1 
2 Item2 
3 Item3 
... 
+0

數據庫不關心值是否連續。所有重要的是價值是唯一的,爲了參考的完整性。 – 2011-01-29 17:13:01

回答

2

您無法更新現有標識值。 Identity_Insert僅用於允許您使用新插入來指定標識列。 最好的辦法是創建一個具有相同定義的新表(包括標識列),並將所有記錄減去標識列插入到新表中。然後刪除舊錶,並用sp_rename重命名新表。請注意,您必須使用此方法刪除任何外鍵。

+0

作爲一個計時器,這個工作。 SELECT按新名稱排序,IDENTITY列將出現。如果你不得不繼續這樣做,那麼設計就會出現嚴重問題,或者你必須根據一些公式自己生成該ID。 – 2011-01-29 17:55:00

0

一種選擇是,添加一個新的整數字段來保存順序值,然後將原始列的標識插入打開,然後遷移新值。

0

SQL Server中IDENTITY列的侷限性之一是它無法直接更新。最好的選擇可能是創建一個新表。

一般來說,如果您關心值的排序,則不要使用IDENTITY,因爲控制排序太困難。請改用常規列。 SQL Server 2011以後版本支持的序列可以給你更多的控制權,並且不需要目標列是隻讀的。