SQLSERVER: Как изменить существующий первичный ключ таблицы int, чтобы он стал столбцом идентификаторов? - PullRequest
6 голосов
/ 24 июня 2009

В моей базе данных есть таблица с тысячами записей. Первичный ключ является целым числом. С этим столбцом связано много ограничений внешнего ключа.

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

Бонусные баллы за ответ, который работает в Sql Server 2000.

Ответы [ 4 ]

14 голосов
/ 24 июня 2009

В SQL Server Management Studio есть отличная функция, которая спасла мой день.

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

В обозревателе объектов перейдите к таблице и выберите столбец, который получит спецификацию Identity. Щелкните правой кнопкой мыши и выберите изменить. На панели свойств столбца разверните дерево «Спецификация идентификации» и измените «(Идентификация)» на yes. Теперь в верхнем левом размере выберите значок «Создать скрипт». Обратите внимание на предупреждающие сообщения.

Теперь у вас будет сгенерированный скрипт, который отбросит все ваши ограничения, воссоздает таблицу с идентичностью и воссоздает ограничения. WOW!

Я протестирую и выложу здесь свои результаты.

Обновление: Все работало нормально. Я забыл сказать в вопросе, что мне нужен сценарий для воспроизведения изменений в наших клиентских установках.

Этот сайт действительно фантастический. Время, которое я потратил, чтобы написать свой собственный ответ, я получил еще 3!

1 голос
/ 24 июня 2009

Нет единого DDL "ALTER TABLE" для изменения существующего столбца на столбец идентификаторов. Вы можете добавить только новый столбец идентификаторов в существующую таблицу.

Это можно сделать в Enterprise Manager, но вы должны знать, что сервер Sql создает новую таблицу и копирует ваши данные в фоновом режиме. У вас могут быть некоторые проблемы с этим. Вот статья, которая объясняет это немного больше http://www.mssqltips.com/tip.asp?tip=1397

В вашем сценарии, я думаю, вам понадобится комбинация этого скрипта и чего-то, что отключит и включит ваши фк.

1 голос
/ 24 июня 2009

В Enterprise Manager щелкните правой кнопкой мыши таблицу в табличном представлении и выберите дизайн.

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

0 голосов
/ 24 июня 2009

Если столбец является целым числом как частью существующих отношений, то он уже уникален. Поэтому вам не нужно беспокоиться о дубликатах! Это одна огромная проблема, которую уже удалось избежать.

Вы можете либо выполнить команду ALTER TABLE, чтобы изменить столбец, либо сделать это с помощью Enterprise Manager.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...