Как добавить свойство удостоверения в существующий столбец в SQL Server - PullRequest
35 голосов
/ 13 ноября 2008

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

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

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

Ответы [ 5 ]

30 голосов
/ 13 ноября 2008

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

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

12 голосов
/ 27 мая 2009

Решение от Викаш не работает; выдает ошибку «Неверный синтаксис» в SQL Management Studio (2005, как указано в OP). Тот факт, что «Compact Edition» SQL Server поддерживает этот тип операций, является просто ярлыком, потому что реальный процесс больше похож на то, что сказал Robert & JohnFX - создание дублирующейся таблицы, заполнение данных, переименование исходных и новых таблиц надлежащим образом.

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

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), используемой живым кодом , НЕ рекомендуется! :)

2 голосов
/ 14 ноября 2008

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

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

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

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

0 голосов
/ 25 января 2017

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

A) через SQL , т. Е .:

-- 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 Object Explorer щелкните правой кнопкой мыши таблицу, которую нужно изменить
  • Выберите «дизайн». Выберите столбец, в который вы хотите добавить IDENTITY
  • Измените настройку идентификации с НЕТ -> ДА (возможно, начальное число)
  • Ctr + S таблица

enter image description here

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

enter image description here

Перейти к MSSMS Инструменты -> Параметры -> Дизайнеры -> Дизайнеры таблиц и баз данных и снимите флажок «Запретить сохранение изменений, требующих пересоздания таблицы»

О чем следует помнить:

  1. на вашем БД достаточно дискового пространства, прежде чем вы это сделаете
  2. БД не используется (особенно таблица, которую вы меняете)
  3. обязательно сделайте резервную копию вашей БД, прежде чем делать это
  4. если в таблице много данных (более 1 ГБ), попробуйте сначала где-нибудь еще перед использованием в реальной БД
0 голосов
/ 26 февраля 2009
alter table tablename 
alter column columnname 
add Identity(100,1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...