2012-01-08 14 views
5

Hej, wszystko, co chcę, aby ponownie ustawić moje wartości IDENTITY COLUMN począwszy od 1 Wiem, jak to zrobić z DBCC CHECKIDENT, jednak chciałbym zastąpić wartość we wszystkich istniejących wierszach. Ta tabela ma niewiele ponad 2 miliony wierszy.Jak zmienić/zastąpić kolumny tożsamości na istniejących danych?

Jakie jest najlepsze podejście do tego zadania?

Odpowiedz

6

Możesz po prostu dodać nową kolumnę tożsamości, a la How to add a new identity column to a table in SQL Server?. Po prostu usuń starą kolumnę i dodaj ją ponownie. To oczywiście złamie wszystkie klucze obce, ale zakładam, że zmieniasz wszystko, co według mnie jest w porządku.

+2

Jeśli masz relacje z kluczem forign, proponuję zachowanie starej kolumny, dopóki nie zaktualizujesz wszystkich tabel podrzędnych o nowej wartości identyfikatora. Możesz go upuścić. – HLGEM

+0

Problem polega na tym, że SQL Server nie może mieć wielu kolumn tożsamości w tabeli: http://stackoverflow.com/questions/349092/can-a-sql-server-table-have-two-identity-columns. Najpierw musisz usunąć atrybut tożsamości ze starego. –

+1

Tak, to prawda, musisz usunąć właściwość tożsamości. – HLGEM

2

Zobacz przykład, jak zastąpić wartości, ale RESEED jest coś innego:

CREATE TABLE t (id INT IDENTITY) 
GO 
INSERT t DEFAULT VALUES 
GO 25 

SET IDENTITY_INSERT t ON 

delete t 

OUTPUT DELETED.Id+100 INTO T(Id) 

SET IDENTITY_INSERT t Off 

SELECT * FROM t 

DROP TABLE t 

Przykładem reseed:

DBCC CHECKIDENT('YourTableName', 150, reseed) 

I

Jeśli trzeba zastąp wartość - z 2-milionowymi rzędami zdecydowanie trzeba poświęcić czas

+0

dzięki za sugestię – jr3

Powiązane problemy