SQL Server Management Studio Express аварийно завершает работу при попытке выполнить запрос ALTER TABLE для добавления PK с автоматическим приращением - PullRequest
0 голосов
/ 24 февраля 2012

У меня есть существующая таблица, в которой я использую существующий столбец (тип INT) в качестве PK и вручную увеличиваю его значение при каждой вставленной строке. Я хотел изменить его на IDENTITY с автоматическим приращением. Я нашел здесь поток (/3425224/sql-server-dobavlyaet-avtoinkrementnyi-pervichnyi-klych-k-suschestvuyschei-tablitse), который, кажется, достигает именно того, чего я хочу. Но каждый раз, когда я запускаю инструкцию ALTER, Mgmt Studio вылетает.

Я также пытался достичь поставленной выше цели, изменяя свойства столбца вручную (Спецификация идентичности / Идентификация: да), как в этой теме (/3663600/sql-server-ne-mozhete-vstavit-nol-v-pole-pervichnogo-klycha). Но каждый раз, когда я закрываю таблицу после изменения свойств, я получаю ошибку

Таблица «Pix»
Невозможно изменить таблицу.
Невозможно вставить значение NULL в столбец «picID», таблица «photo.dbo.Tmp_Pix»; столбец не допускает пустых значений. Вставить не удается.
Заявление было прекращено.

Не уверен, что происходит.

1 Ответ

1 голос
/ 24 февраля 2012

Вы не можете изменить существующий столбец, чтобы стать столбцом IDENTITY.

Что вам нужно сделать:

  • создать новый столбец сINT IDENTITY
  • удалить ограничение первичного ключа
  • удалить старый столбец
  • добавить ограничение первичного ключа для нового столбца

Проблемаможет быть - если у вас уже есть данные в этой таблице - что новые значения идентификаторов не обязательно соответствуют старым значениям в вашем столбце ID.

Если вам нужно сохранить их, то это становится еще более сложным:

  • создайте новую таблицу с правильной структурой и убедитесь, что столбец ID равен INT IDENTITY
  • включить IDENTITY_INSERT для этой таблицы
  • вставить все строки из старой таблицы в новую (и в процессе вставить старые значения ID в новую ID столбец IDENTITY)
  • отключить IDENTITY_INSERT для этой таблицы
  • удалить старую таблицу
  • возможно переименовать новую таблицу
...