Подтвердить что ты не робот

Как добавить свойство идентификации в существующий столбец в SQL Server

В SQL Server (в моем случае, 2005), как я могу добавить свойство идентификации в существующий столбец таблицы с помощью T-SQL?

Что-то вроде:

alter table tblFoo 
    alter column bar identity(1,1)
4b9b3361

Ответ 1

Я не верю, что вы можете это сделать. Лучше всего создать новый столбец идентификаторов и скопировать данные с помощью команды вставки идентификатора (если вы действительно хотите сохранить старые значения).

Вот достойная статья, описывающая процесс в деталях: http://www.mssqltips.com/tip.asp?tip=1397

Ответ 2

Решение, отправленное Vikash, не работает; он создает ошибку "Неправильный синтаксис" в SQL Management Studio (2005, как указано в OP). Тот факт, что "Компактная версия" SQL Server поддерживает такую ​​операцию, - это просто ярлык, потому что реальный процесс больше похож на то, что сказал Роберт и ДжонФХ - создание дублирующей таблицы, заполнение данных, переименование исходных и новых таблиц соответственно.

Если вы хотите сохранить значения, которые уже существуют в поле, которое должно быть личным, вы можете сделать что-то вроде этого:

CREATE TABLE tname2 (etc.)
INSERT INTO tname2 FROM tname1

DROP TABLE tname1
CREATE TABLE tname1 (with IDENTITY specified)

SET IDENTITY_INSERT tname1 ON
INSERT INTO tname1 FROM tname2
SET IDENTITY_INSERT tname1 OFF

DROP tname2

Конечно, отбрасывание и повторное создание таблицы (tname1), которая используется в реальном времени, НЕ рекомендуется!:)

Ответ 3

Заселена ли таблица? Если не отбрасывать и воссоздавать таблицу.

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

Создайте новую таблицу по своему желанию, загрузите записи из старой таблицы в новый тальбе и позвольте базе данных заполнить столбец идентичности как обычно. Переименуйте исходную таблицу и переименуйте ее в нужное имя:).

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

Ответ 4

Нет прямого способа сделать это, кроме:

A) через SQL i.e.:

-- make sure you have the correct CREATE TABLE script ready with IDENTITY

SELECT * INTO abcTable_copy FROM abcTable

DROP TABLE abcTable

CREATE TABLE abcTable -- this time with the IDENTITY column

SET IDENTITY_INSERT abcTable ON

INSERT INTO abcTable (..specify all columns!) FROM (..specify all columns!) abcTable_copy

SET INDENTITY_INSERT abcTable OFF

DROP TABLE abcTable_copy 

-- I would suggest to verify the contents of both tables 
-- before dropping the copy table

B) Через MSSMS, который будет делать то же самое в фоновом режиме, но будет меньше жира.

  • В обозревателе объектов MSSMS щелкните правой кнопкой мыши таблицу, которую необходимо изменить
  • Выберите "дизайн" Выберите столбец, который вы хотите добавить IDENTITY, чтобы
  • Измените настройку идентификации от NO → YES (возможно, семя)
  • Ctr + S таблица

введите описание изображения здесь

Это приведет к падению и воссозданию таблицы со всеми исходными данными. Если вы получите предупреждение:

введите описание изображения здесь

Перейдите в MSSMS Инструменты → Параметры → Дизайнеры → Дизайнеры таблиц и баз данных и снимите флажок "Предотвратить сохранение изменений, требующих повторного создания таблицы"

Осторожно:

  • Ваша БД имеет достаточно места на диске, прежде чем вы это сделаете
  • БД не используется (особенно таблица, которую вы меняете)
  • Обязательно создайте резервную копию своей БД, прежде чем делать это.
  • Если в таблице много данных (более 1G), попробуйте сначала в другом месте перед использованием в реальном DB

Ответ 5

  1. Создать новую таблицу

    SELECT * INTO Table_New FROM Table_Current WHERE 1 = 0;
    
  2. Удалить столбец из новой таблицы

    Alter table Table_New drop column id;
    
  3. Добавить столбец с идентификатором

    Alter table Table_New add id int primary key identity; 
    
  4. Получить все данные в новой таблице

    SET IDENTITY_INSERT Table_New ON;
    INSERT INTO Table_New (id, Name,CreatedDate,Modified) 
    SELECT id, Name,CreatedDate,Modified FROM Table_Current;
    SET IDENTITY_INSERT Table_New OFF;
    
  5. Бросить старый стол

    drop table Table_Current;
    
  6. Переименовать новый стол как старый

    EXEC sp_rename 'Table_New', 'Table_Current';
    

Ответ 6

alter table tablename 
alter column columnname 
add Identity(100,1)