2010-01-26 10 views
11

Czy istnieje sposób na trwałe zmiany identyfikatora początkowego dla kolumny tożsamości? Używanie DBCC CHECKIDENT wydaje się ustawić wartość_ostateczną. Jeśli tabela zostanie obcięta, wszystkie wartości zostaną zresetowane.Zmienianie tożsamości w programie SQL Server (na stałe!)

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'); 

powraca

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

miałem nadzieję, że niektóre składnia jak

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

istniałaby.

Czy konieczne jest utworzenie nowej kolumny, przesunięcie wartości w poprzek, usunięcie oryginalnej kolumny i zmiana nazwy nowej?

+0

Running Profiler, widzę, że MS tworzy tymczasową tabelę, kopiuje dane przez, a następnie upuszcza istniejącą tabelę i zmienia nazwę tabeli tymczasowej. Prawdopodobnie dlatego, że nie może być więcej niż jedna kolumna tożsamości. – avenmore

Odpowiedz

15

Od Books Online:

„Aby zmienić pierwotną wartość początkową i reseedować istniejące wiersze, należy usunąć kolumnę tożsamości i utwórz ją określając nową wartość początkową Kiedy tabela zawiera dane, numery identyfikacyjne są. dodane do istniejących wierszy z określonymi wartościami początkowymi i przyrostowymi. Kolejność, w jakiej wiersze są aktualizowane, nie jest gwarantowana. "

3

MSSQL nie pozwala na łatwe dodawanie lub modyfikowanie tożsamości w istniejącej kolumnie za pośrednictwem TSQL. Musiałbyś upuścić kolumnę i ponownie ją dodać. Nie trzeba dodawać, że to może grać w piekle z relacjami FK. Możesz to zrobić bezpośrednio w menedżerze przedsiębiorstwa. Jednak nie będzie to zabawne, jeśli będziesz musiał to zrobić w wielu kolumnach.

Czy konieczne jest stworzenie nowego kolumnę, przesuń wartości drugiej, spadek oryginalną kolumnę i zmienić nazwę nowy?

Tak, i nie zapomnij, aby naprawić/aktualizacji wszystkich indeksów, kluczy obcych relacje itp, które są przywiązane do tej kolumny

+0

AND nawet nie myśl o zrobieniu tego na dużym stole! – HLGEM

+0

Ogólnie zalecam, aby nie edytować żadnej tabeli produkcyjnej w Enterprise Manager. Czasami kopiuje, upuszcza i wkleja tabelę, aby wykonać pożądaną akcję. –

0

„Czy trzeba utworzyć nową kolumnę, przesuń wartości w poprzek, upuść oryginalną kolumnę i zmień nazwę nowego? "

Właściwie w Enterprise Manager, po dodaniu kolumny ID do istniejącej tabeli (lub zmianie pola INT PK na INT PK ID), robi to za sceną.

Powiązane problemy