Как добавить идентификатор в столбец в 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 минут.

действия:

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

  2. открыть таблицу в режиме конструктора

  3. изменить. Не сохранять

  4. Нажмите кнопку Создать сценарий изменения (обычно слева справа над обозревателем объектов)

  5. скопировать сгенерированный скрипт
  6. закрыть окно конструктора (вы можете запустить только один экземпляр в то время)
  7. открыть новое окно
  8. выполнить скрипт

  9. сделано. Теперь ваша колонка имеет личность :)


вы можете добавить идентификатор в существующий столбец. Это просто можно сделать. в SSMS просто перейдите в Инструменты->Параметры->конструкторы->конструкторы таблиц и баз данных и снимите флажок запретить сохранение изменений, требующих повторного создания таблицы.

теперь добавьте идентификатор в режиме конструктора в требуемый столбец и сохраните.


один из способов установить