2012-03-12 66 views
-1

。 我喜歡插入行標識列被刪除與原始值,但不知道如何這樣做。在SQL SERVER 2010中,我刪除了一些使用標識字段的列,刪除了標識列

我試圖修改,但身份柱灰色

UPDATE table 
+2

沒有SQL Server版本** 2010 ** ....你在用什麼?另外:**爲什麼**麻煩重新循環那些使用的身份值?你從中得到什麼?看起來好像很多工作沒有好處,真的...... – 2012-03-12 17:34:35

+2

重用身份值是一個非常糟糕的主意。 YOu永遠不能依賴身份不要跳過值(即使你回滾查詢也會使用它們),所以沒有任何理由試圖重用它們。如果您的相關表格沒有定義的PK/FK結構(您不應該這樣做),將新數據與舊數字相對應會將錯誤記錄與它們聯繫起來,因爲這些舊記錄不會與父記錄一起刪除。 – HLGEM 2012-03-12 17:48:11

回答

2
SET IDENTITY_INSERT [YourTableName] ON 
--do your update/insert query here 
SET IDENTITY_INSERT [YourTableName] OFF 
+1

我認爲說'SQL SERVER 2010'是一個錯誤。這是他的要求的解決方案,它適用於SQL SERVER 2000及更高版本。 [SET IDENTITY_INSERT - MSDN](http://msdn.microsoft.com/zh-cn/library/aa259221(v=sql.80).aspx) – Kaf 2012-03-12 18:00:50

+1

我會給你回覆某人從你身上拿走的+1 ,因爲你確實回答瞭如何重用身份值的問題。然而,上面提到的關於這樣做(和毫無意義)的危險的觀點不應該被忽視。 – 2012-03-12 18:22:07

+0

@AaronBertrand - 感謝和對待! – Kaf 2012-03-12 18:34:26

-2

您需要補種的身份:

dbcc checkident (mytable, reseed, 30) 
+2

但是** **可能會導致重複,如果值高於例如在你的示例中有30個存在! **這個操作非常小心**!將一個IDENTITY重新轉換爲一個給定的值,不會**跳過比已重置值高的現有值 - 這是一種常見的誤解! – 2012-03-12 17:35:28

+1

這是對的,爲什麼?因爲IDENTITY屬性本身並不強制執行唯一性。我在這裏發表了一些關於IDENTITY列的類似誤解:http://sqlblog.com/blogs/aaron_bertrand/archive/2012/02/27/bad-habits-to-kick-believing-everything-you-hear-or-read .aspx – 2012-03-12 17:56:37

1

你能解釋爲什麼你關心是否有差距的身份專欄?如果您只想在標籤旁邊添加一些漂亮的ID號碼(並且不擔心其他表格中的相關數據,或者即使刪除了ID 1,第二行是否保留ID 2),您始終可以導出這些無意義的ID號碼在運行時,例如

SELECT col, MeaninglessID = ROW_NUMBER() OVER (ORDER BY col) 
FROM dbo.table 
ORDER BY col; 
+1

我剛剛意識到這是我的第1,000個答案。 – 2012-03-12 18:44:44

+0

WOOOHOOOO !!! ;-)恭喜 - 期待數以千計:-) – 2012-03-12 20:02:57

+0

謝謝馬克,我有很多方法可以抓住你。 :-) – 2012-03-12 20:10:17