Есть ли какой-либо способ изменить семя идентичности для колонки идентичности постоянно? Используя 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
существовал бы.
Действительно ли необходимо создать новую колонку, преодолеть ценности, пропустить оригинальную колонку и переименовать новое?
Из книг онлайн:
«Чтобы изменить исходное значение семян и доступ к любым существующим строкам, вы должны отбросить столбец Identity и воссоздать его, указав новое значение семени. Когда таблица содержит данные, номера идентификации добавляются в существующие строки с указанными значениями семян и приращи. Порядок обновления строк не гарантируется. "
»необходимо для создания нового столбца, перемещать значения по всему, отбросить исходный столбец и переименовать новое?»
на самом деле в менеджере предприятия, Когда вы добавляете столбец ID на существующую таблицу (или измените поле INT PK в INT PK ID), он делает это за сценой.
MSSQL не позволяет легко добавить или изменить идентификатор на существующем столбце с помощью TSQL. Вам придется отказаться от колонки и добавить ее заново. Нет необходимости говорить, что это может сыграть на руку отношениям с FK. Это можно сделать непосредственно в менеджере предприятия. Однако это не будет весело, если Вам придется сделать это с множеством столбцов.
Нужно ли создавать новый столбец, переместить значения поперек, сбросить оригинальную колонку и переименовать new?
Yup, и не забудьте исправить/обновить все индексы, внешние ключевые отношения и т.д., которые привязаны к этой колонке
.