Создание первичного ключа и идентификационного столбца после загрузки данных - PullRequest
1 голос
/ 11 мая 2009

У меня к вам быстрый вопрос к гуру SQL. У меня есть существующие таблицы без столбца первичного ключа и Identity не установлен. Теперь я пытаюсь изменить эти таблицы, сделав существующий столбец целых чисел в качестве первичного ключа и добавив значения идентификаторов для этого столбца. У меня вопрос, должен ли я сначала скопировать все записи из таблицы во временную таблицу, прежде чем вносить эти изменения. Потеряю ли я все предыдущие записи, если запустил комнаду T-SQL, чтобы создать первичный ключ и добавить столбец идентификаторов в эти таблицы Какие подходы я должен использовать, например

1) Создать временную таблицу для копирования всех записей из таблицы, подлежащей изменению 2) Загрузите все записи в соблазнительный 3) Внести изменения в схему таблицы 4) Наконец загрузите записи из временной таблицы в исходную таблицу.

или

есть способы получше? Я очень ценю вашу помощь

Спасибо

Ответы [ 5 ]

4 голосов
/ 11 мая 2009

Инструменты> Параметры> Дизайнеры> Дизайнеры таблиц и баз данных

Снимите флажок «Запретить сохранение изменений, которые требуют пересоздания таблицы»

[Редактировать] Я пробовал это с заполненными таблицами, и я не потерял данные, но я не очень много знаю об этом.

3 голосов
/ 11 мая 2009

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

2 голосов
/ 11 мая 2009

просто сделайте все ваши изменения в Management Studio, скопируйте / вставьте сгенерированный скрипт в файл. НЕ СОХРАНЯЙТЕ ИЗМЕНЕНИЯ на этом этапе. Посмотрите и отредактируйте этот скрипт по мере необходимости, он, вероятно, будет делать почти то, что вы думаете (он удалит исходную таблицу и переименует временную в имя оригинала), но также обработает все ограничения и FK.

0 голосов
/ 11 мая 2009

Вы всегда можете добавить столбец IDENTITY после того, как закончите копировать свои данные. Затем вы также можете сбросить начальное значение IDENTITY до максимального целого числа + 1. Это должно решить ваши проблемы.

DBCC CHECKIDENT ('MyTable', RESEED, n)

Где n - номер, с которого вы хотите начать идентификацию.

0 голосов
/ 11 мая 2009

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

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

Каким бы образом вы это ни делали, сначала сделайте резервную копию !!

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