2010-01-26 28 views
11

是否有任何方式永久更改標識列的標識種子?使用DBCC CHECKIDENT似乎設置了last_value。如果表格被截斷,所有值都將被重置。更改SQL Server中的標識種子(永久!)

dbcc checkident ('__Test_SeedIdent', reseed, 1000) 

select name, seed_value, increment_value, last_value 
from sys.identity_columns 
where [object_id] = OBJECT_ID('__Test_SeedIdent'); 

回報

name  seed_value increment_value last_value 
------------------------------------------------- 
idIdent 1   1    1000 

我希望像

alter table dbo.__Test_SeedIdent alter column idIdent [int] identity(1000,1) NOT NULL 

一些語法會存在。

是否有必要創建一個新的列,移動這些值,刪除原始列並重命名新的?

+0

正在運行Profiler,我看到MS創建了一個臨時表,將數據複製過來,然後刪除現有表並重命名臨時表。可能是因爲不能有多個標識列。 – avenmore 2010-01-26 14:29:32

回答

15

從聯機叢書:

「要改變原來的種子值和補種的任何現有行,必須刪除標識列並重新創建它指定新的種子值當表包含數據,身份號碼。添加到具有指定的種子和增量值的現有行中,不保證行更新的順序。「

3

MSSQL不允許您通過TSQL非常輕鬆地在現有列上添加或更改標識。您必須刪除該列並重新添加。毋庸置疑,這可以與FK的關係發揮地獄般的作用。您可以直接在企業管理器中執行此操作。但是,如果你必須對很多列進行這樣的操作,那就不會很有趣了。

是否有必要建立一個新的 列,整個移動值,下降 原始列,並重新命名 新?

是啊,不要忘了修復/更新所有索引,外鍵關係等,它們依賴於該列

+0

甚至沒有想到這樣做到一張大桌子! – HLGEM 2010-01-26 18:15:19

+0

我通常建議不要編輯企業管理器中的任何生產表。有時它會複製,拖放和粘貼您的表格以完成所需的操作。 – 2010-01-28 16:30:22

0

「是否有必要創建新列,移動值越過,放下原始列並重命名新的?「

實際上,在企業管理器中,當您將ID列添加到現有表(或將INT PK字段更改爲INT PK ID)時,它會在場景後執行此操作。