請幫幫我!我有一個表將一個標識字段的值是,例如, ,例如,1,2,4,6,8,10,11 ....等重新排列sql server中的標識列值
我想使它在一個序列,即,1,2,3,4,5,6,7 ...不使用降
謝謝
請幫幫我!我有一個表將一個標識字段的值是,例如, ,例如,1,2,4,6,8,10,11 ....等重新排列sql server中的標識列值
我想使它在一個序列,即,1,2,3,4,5,6,7 ...不使用降
謝謝
你不能。 identity
列不可更新。 (或至少你不能以任何理智的方式,你可以刪除表中的所有行,然後將它們重新插入IDENTITY_INSERT
上)
identity
列中的差距也只是一個事實,最好能達到有!如果您需要連續的數字序列用於顯示,您可以使用ROW_NUMBER
。
身份將alawys有差距,他們花費的每個記錄,回滾以及以後刪除的記錄。 – HLGEM 2011-04-27 15:29:48
爲什麼不創建一個新的字段,使它從1開始的idenity種子,然後刪除舊列並重命名新列(然後重新創建所有FK引用)。
SQL Server不允許更改列上的標識屬性。您需要刪除整個原始列並創建一個新的標識列。沒有特別的保證,新的順序與舊的順序相對應。 – 2011-04-27 14:39:54
@Martin - 不正確。通過SQL Server 2005/2008管理器中的用戶界面,您可以更改列刪除列的自動編號(標識)屬性(通過右鍵單擊並選擇「設計」)來選擇表。 – 2011-04-27 16:50:14
這實際上是在幕後重建整個桌子。單擊工具欄中的「腳本」圖標查看它生成的SQL。 – 2011-04-27 16:51:13
有沒有簡單的方法來做到這一點,並沒有理由爲什麼你應該。然而,你可以contruct期爲用戶提供類似的功能:
CREATE VIEW MyTableView AS SELECT ROW_NUMBER() OVER (ORDER BY Identity) AS RowNum, * FROM MyTable
,然後讓客戶從MyTableView選擇來代替。
如果您需要視圖與表格名稱相同,以確保向後兼容,您當然可以重命名您的表格,然後使用舊的表格名稱創建視圖。
哎呦,完全錯誤的問題,現在應該修復答案。 – 2011-04-27 14:35:20
DBCC CHECKIDENT(< '表名'>,RESEED,< '表最後一個序列**'>)
**這將使數加1(+1)進入時。即需要下一個爲38的新紀錄,所以用37作爲這個值。
我認爲這是最好的解決辦法..嘗試,如果你喜歡它...
DECLARE @INC AS INTEGER
SET @INC = 1
WHILE (@INC <= 7582) --7582 is rowcount of table
BEGIN
UPDATE YourTable
SET ID = @INC
WHERE ID = (
SELECT MIN(ID) AS T
FROM YourTable
WHERE ID > @INC
) --ID=> Identity column
SET @INC = @INC + 1
END
注:執行,你需要刪除的標識插入到列前。
除了下面的答案之外,除了唯一標識一條記錄外,這個標識字段應該沒有附加的含義。它不應該是一個發票號碼或包裝號碼或任何其他類型的數字,意味着某人某事。 – Leslie 2011-04-27 14:22:59
你爲什麼要這麼做? – 2011-04-27 14:30:09