Изменение удостоверения личности в SQL Server (навсегда!) - PullRequest
11 голосов
/ 26 января 2010

Есть ли способ навсегда изменить начальное значение идентификатора для столбца идентификаторов?Использование DBCC CHECKIDENT просто устанавливает значение last_value.Если таблица усекается, все значения сбрасываются.

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

.*

Нужно ли создавать новый столбец, перемещать значения поперек, отбрасывать исходный столбец и переименовывать новый?

Ответы [ 3 ]

15 голосов
/ 26 января 2010

Из Книг Онлайн:

"Чтобы изменить исходное начальное значение и повторно заполнить любые существующие строки, необходимо удалить столбец идентификаторов и воссоздать его, указав новое начальное значение. Когда таблица содержит данные, идентификационные номера добавляются в существующие строки с указанным начальным значением и значения приращения. Порядок обновления строк не гарантируется. "

3 голосов
/ 26 января 2010

MSSQL не позволяет очень легко добавлять или изменять идентификационные данные в существующем столбце через TSQL. Вам нужно будет удалить столбец и добавить его заново. Излишне говорить, что это может сыграть адскую роль в отношениях с ФК. Вы можете сделать это прямо в менеджере предприятия. Однако это не будет забавно, если вы сделаете это с большим количеством столбцов.

Нужно ли создавать новый столбец, переместить значения через, падение оригинальный столбец и переименуйте новый

Да, и не забудьте исправить / обновить все индексы, отношения внешнего ключа и т. Д., Связанные с этим столбцом

0 голосов
/ 26 января 2010

"Необходимо ли создать новый столбец, переместить значения через него, удалить исходный столбец и переименовать новый?"

На самом деле в Enterprise Manager, когда вы добавляете столбец идентификатора в существующую таблицу (или изменяете поле INT PK на INT PK ID), он делает это за сценой.

...