SQLSERVER: как изменить первичный ключ существующей таблицы int, чтобы он стал столбцом идентификации?

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

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

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


person neves    schedule 23.06.2009    source источник


Ответы (4)


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

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

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

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

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

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

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

person neves    schedule 24.06.2009
comment
тебе не кажется, что мое предложение было проще? :) - person Stuart; 24.06.2009
comment
@STuart: Это то же самое решение, но сначала Невес сохраняет свой сценарий. - person gbn; 24.06.2009
comment
@Neves: Enterprise Manager имеет ту же концепцию изменения и сохранения - person gbn; 24.06.2009
comment
@gbn - я в курсе, спасибо за очевидное :) просто пытаюсь упростить, зачем генерировать скрипты, которые вам не нужны - person Stuart; 24.06.2009
comment
@Stuart: Я забыл сказать, что мне нужно отправить обновление нашим клиентам. Мне нужно записать то, что я сделал, и поместить это в нашу программу обновления схемы базы данных. Скрипты действительно нужны. - person neves; 25.06.2009
comment
@neves: спасибо, что поделились, мне также нужно сделать это в нескольких средах и нужен скрипт. - person Veli Gebrev; 22.02.2011

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

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

person Stuart    schedule 23.06.2009

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

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

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

person Matthew Pelser    schedule 24.06.2009

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

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

person Raj More    schedule 23.06.2009