Как добавить идентификатор в столбец в SQL Server?
У меня есть таблица около 10 миллионов строк. Мы просто импортировали его из другой базы данных с помощью SQL Server Management Studio. Он создает таблицу, но без идентификатора и первичного ключа в столбце первичного ключа.
Я мог бы добавить первичный ключ, но не мог добавить индивидуальности. Это все время, когда я делаю это в designer. Даже я установил тайм-аут в 0.
Мне нужно создать, вероятно, другой набор столбцов первичный ключ и идентификатор, скопировать данные из старого, удалить старый столбец и переименовать новый.
может ли кто-нибудь показать мне, что будет лучшим способом сделать это для таких больших столов, без дополнительного перегрева?
4 ответов
вы не может добавить IDENTITY
к существующему столбцу. Это просто невозможно.
вам нужно создать новая типа INT IDENTITY
а затем отбросьте старый столбец, который вам больше не нужен (и, возможно, переименуйте новый столбец в старое имя - если это необходимо)
также: я бы не сделайте это в визуальном конструкторе - это попытается воссоздать таблицу с новой структурой, скопируйте над все данные (всего 10 миллионы строк), а затем удалить старую таблицу.
гораздо эффективнее использовать прямые операторы T-SQL - это сделает обновление" на месте", неразрушающее (данные не теряются), и это не необходимо скопировать около 10 миллионов строк в процессе...
ALTER TABLE dbo.YourTable
ADD NewID INT IDENTITY(1,1) NOT NULL
при добавлении нового столбца типа INT IDENTITY
к вашей таблице, тогда она будет автоматически заполнена последовательными номерами. Вы не можете остановить это, и вы также не можете обновить ценности позже.
ни один из этих вариантов не очень полезен, в конце концов-вы можете получить разные значения ID.... чтобы сделать это правильно, вы должны:
- создайте новую таблицу заранее, с правильной структурой и
IDENTITY
уже - затем повороте на
SET IDENTITY_INSERT (yourtable) ON
в этой таблице, чтобы разрешить вставку значений в столбец идентификаторов - скопировать эти данные из исходного источника
- включить off identity вставить снова:
SET IDENTITY_INSERT (yourtable) OFF
только при таком подходе вы сможете получить те же идентификаторы в столбце идентификаторов в новой таблице.
ОК. Я смог добавить идентификатор к существующему основному столбцу с 10 миллионами записей. Заняло у меня около 30 минут.
действия:
измените базу данных на однопользовательский режим (чтобы убедиться, что никакие другие подключения к databse не могут вызвать блокировку)
открыть таблицу в режиме конструктора
изменить. Не сохранять
Нажмите кнопку Создать сценарий изменения (обычно слева справа над обозревателем объектов)
- скопировать сгенерированный скрипт
- закрыть окно конструктора (вы можете запустить только один экземпляр в то время)
- открыть новое окно
выполнить скрипт
сделано. Теперь ваша колонка имеет личность :)
вы можете добавить идентификатор в существующий столбец. Это просто можно сделать. в SSMS просто перейдите в Инструменты->Параметры->конструкторы->конструкторы таблиц и баз данных и снимите флажок запретить сохранение изменений, требующих повторного создания таблицы.
теперь добавьте идентификатор в режиме конструктора в требуемый столбец и сохраните.