2014-03-03 49 views
0

夥計們我有一個數據庫中的表有大約200 +記錄。現在,例如,如果我刪除了一個主鍵(標識列)= 25的記錄,所以我的pk列變爲23,25,26,27 ...等更新標識列有記錄

是否有任何命令,我可以使用那將更新整個表的標識列? DBCC命令不是我要找的...既沒有"set identity_insert YourTable ON"解決了我的問題。

我是否必須截斷整個表並重新輸入所有數據?如果我的db有200k行怎麼辦?這個解決方案將是不切實際的。

P.S.請不要問我爲什麼需要序列化我的PK列。這是我的客戶的要求。我正在使用SQL Server 2012.

+2

不,你**不能**做到這一點 - 也不應該**!**通過這樣做,你可以*回收*一個'ID'值。 25已被連續使用,並在稍後爲其賦予新的含義。真的***真的很糟糕的主意!不要這樣做 - 一旦發現「IDENTITY」值,它就消失了 - 不要試圖回收這些數據。告訴你的客戶調整他的要求.. .. –

回答

1

不,標識列不能被重新序列化。您可以使用存儲過程(在INSERT上)創建自己的標識列(自動增加列)。它將像身份列一樣工作,您不必擔心跳轉。

1

IDENTITY只保證值是唯一的,而不是它們將被序列化(就像你的情況一樣)。

您需要將所有數據複製到臨時表中並將其複製回來,但無法更新IDENTITY列(AFAIK)。

如果您需要更新值,您應該改變設計並將其設置爲簡單的int列並在其上創建主鍵。它會解決你未來的問題。

但是你應該和你的客戶談談,檢查什麼是優先事項,以及他爲什麼需要序列化值,如果他真的需要他們。對於客戶/訂單/產品等等,「回收」標識符確實是一種不好的做法。