Как заголовок, у меня есть существующая таблица, которая уже заполнена 150000 записей. Я добавил столбец Id (который в настоящее время нулевой).
Я предполагаю, что могу выполнить запрос, чтобы заполнить этот столбец инкрементными числами, а затем установить в качестве первичного ключа и включить автоинкремент. Это правильный путь? И если да, то как мне заполнить начальные цифры?
sql-server
sql-server-2008
primary-key
alter-table
fearofawhackplanet
источник
источник
ALTER TABLE ORDER ALTER COLUMN ORDERNO RESTART WITH 1
но я не хотел пробовать это без проверки с экспертом :) Реф. pic.dhe.ibm.com/infocenter/iseries/v7r1m0/...alter table attachments add ATTACHMENT_NUMBER int identity (1000, 1)
PRIMARY KEY
подразумевается, чтоNOT NULL
это на месте - и опять же - это не является абсолютно необходимым. Но я предпочитаю быть откровенным, и поэтому у меня всегдаNOT NULL
есть, просто чтобы быть абсолютно яснымPRIMARY KEY
, кластерный индекс создается автоматически для вас (если вы не укажете явноNONCLUSTERED
)Вы не можете «включить» IDENTITY: это перестройка таблицы.
Если вас не волнует порядок нумерации, вы бы добавили столбец NOT NULL с IDENTITY за один раз. 150 тысяч строк не много.
Если вам нужно сохранить какой-то порядок номеров, добавьте номера соответствующим образом. Затем используйте конструктор таблиц SSMS, чтобы установить свойство IDENTITY. Это позволяет вам сгенерировать скрипт, который будет выполнять удаление / добавление / сохранение номеров / повторное заполнение столбца.
источник
ALTER TABLE ... SWITCH
может сделать это без этого.У меня была эта проблема, но я не мог использовать столбец идентификации (по разным причинам). Я остановился на этом:
Заимствовано отсюда .
источник
Если столбец уже существует в вашей таблице и он пуст, вы можете обновить столбец с помощью этой команды (заменить id, tablename и tablekey):
источник
Когда мы добавим и идентифицируем столбец в существующей таблице, он будет автоматически заполнен, нет необходимости заполнять его вручную.
источник
дизайнером вы можете установить идентичность (1,1), щелкните правой кнопкой мыши на tbl => desing => в левой части (правой кнопкой мыши) => properties => в столбцах идентификаторов выберите #column
свойства
колонна идей
источник
Если ваша таблица связана с другими таблицами, использующими ее первичный или внешний ключ, возможно, изменить таблицу невозможно. поэтому вам нужно сбросить и создать таблицу снова.
Чтобы решить эти проблемы, вам нужно сгенерировать сценарии, щелкнув правой кнопкой мыши на базе данных и в расширенной опции установить тип данных для сценария к схеме и данным. после этого, используя этот скрипт с изменением столбца, идентифицируйте и регенерируйте таблицу, запустив ее запрос.
Ваш запрос будет выглядеть так:
источник
Вот идея, которую вы можете попробовать. Исходная таблица - без идентификатора столбца table1 создайте новую таблицу - вызовите table2 вместе с идентификатором столбца. скопировать данные из таблицы1 в таблицу2 - столбец идентификаторов автоматически заполняется автоматически увеличенными числами.
переименуйте исходную таблицу - table1 в table3 переименуйте новую таблицу - table2 в table1 (оригинальная таблица) Теперь у вас есть таблица1 с включенным столбцом идентификаторов и заполненная для существующих данных. Убедившись, что проблем нет, и работайте должным образом, уберите table3, когда он больше не нужен.
источник
Создайте новую таблицу с другим именем и теми же столбцами, с первичным ключом и внешним ключом и свяжите это в своем коде оператора вставки. Например, для СОТРУДНИКОВ замените на СОТРУДНИКОВ.
Однако вы должны либо удалить существующую таблицу EMPLOYEE, либо внести некоторые изменения в соответствии с вашими требованиями.
источник
Этот ответ является небольшим дополнением к ответу с наибольшим количеством голосов и работает для SQL Server. Вопрос запрашивал первичный ключ с автоинкрементом, текущий ответ добавляет первичный ключ, но он не помечается как автоинкремент. Приведенный ниже скрипт проверяет наличие столбцов и существование и добавляет их с включенным флагом автоинкремента.
источник
источник
изменить таблицу / ** вставить имя таблицы ** / добавить идентификатор int IDENTITY (1,1)
удалить из / ** вставить имя таблицы ** / где идентификатор в
(
выберите a.id FROM / ** вставьте имя табуляции / в качестве ЛЕВОГО ВНЕШНЕГО СОЕДИНЕНИЯ (ВЫБЕРИТЕ МИН (id) в качестве идентификатора ОТ / вставьте имя табуляции / GROUP BY / вставьте столбцы c1, c2 .... ** /
ГДЕ t1.id НЕДЕЙСТВИТЕЛЕН
)
изменить таблицу / ** вставить имя таблицы ** / DROP COLUMN id
источник
Попробуйте что-то вроде этого (сначала на тестовой таблице):
Я не проверял это вообще, так что будьте осторожны!
источник
IDENTITY
столбцов) и не будет работать в любом случае.UPDATE your_table SET your_id_field = MAX(your_id_field)+1
ты не можешь просто забитьMAX
туда. Где находитсяWHERE
пункт, чтобы избежать повторного обновления одной и той же строки?Это работает в MariaDB, поэтому я могу только надеяться, что это работает в SQL Server: удалите только что вставленный столбец ID, а затем используйте следующий синтаксис: -
ALTER TABLE table_name ADD id INT ПЕРВИЧНЫЙ КЛЮЧ AUTO_INCREMENT;
Нет необходимости в другом столе. Это просто вставляет столбец id, делает его основным индексом и заполняет его последовательными значениями. Если SQL Server этого не сделает, мои извинения за то, что я потратил ваше время.
источник
ALTER TABLE table_name ADD COLUMN ID INT NOT NULL ПЕРВИЧНЫЙ КЛЮЧ AUTO_INCREMENT; Это может быть полезно
источник