Добавьте столбец в существующую таблицу и однозначно их число

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

Например, если я добавлю новый столбец с именем "ID" (число), я хочу затем инициализировать уникальное значение для каждой из записей. Итак, в моем столбце ID будут указаны записи от 1 до 1000. Как мне это сделать?

Ответ 1

Это будет зависеть от базы данных, но для SQL Server это может быть достигнуто следующим образом:

alter table Example
add NewColumn int identity(1,1)

Ответ 2

Это поможет, если вы опубликуете, какую базу данных SQL вы используете. Для MySQL вы, вероятно, хотите auto_increment:

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY

Не уверен, что это применимо к значениям ретроактивно. Если это не так, вы должны просто иметь возможность перебирать свои значения с помощью хранимой процедуры или в простой программе (если никто не пишет в базу данных), и используйте функцию LAST_INSERT_ID() для генерации значения id.

Ответ 3

для оракула вы можете сделать что-то вроде ниже

alter table mytable add (myfield integer);

update mytable set myfield = rownum;

Ответ 4

И эквивалент Postgres (вторая строка является обязательной, только если вы хотите, чтобы "id" был ключом):

ALTER TABLE tableName ADD id SERIAL;
ALTER TABLE tableName ADD PRIMARY KEY (id);

Ответ 5

Просто использование ALTER TABLE должно работать. Добавьте столбец соответствующего типа и флаг IDENTITY, и он должен сделать трюк

Ознакомьтесь с этой статьей MSDN http://msdn.microsoft.com/en-us/library/aa275462(SQL.80).aspx в синтаксисе ALTER TABLE

Ответ 6

Зависит от базы данных, так как каждая база данных имеет другой способ добавления порядковых номеров. Я бы изменил таблицу, чтобы добавить столбец, а затем написать db script в groovy/python/etc, чтобы прочитать данные и обновить идентификатор с помощью последовательности. Как только данные будут установлены, я бы добавил последовательность в таблицу, которая начинается после верхнего номера. Как только данные будут установлены, правильно установите первичные ключи.

Ответ 7

Если вы не хотите, чтобы ваш новый столбец имел тип IDENTITY (auto-increment), или вы хотите быть конкретным в отношении порядка нумерации строк, вы можете добавить столбец типа INT NULL и затем заполнить его следующим образом. В моем примере новый столбец называется MyNewColumn, а существующий столбец первичного ключа для таблицы называется MyPrimaryKey.

UPDATE MyTable
SET MyTable.MyNewColumn = AutoTable.AutoNum
FROM
(
    SELECT MyPrimaryKey, 
    ROW_NUMBER() OVER (ORDER BY SomeColumn, SomeOtherColumn) AS AutoNum
    FROM MyTable 
) AutoTable
WHERE MyTable.MyPrimaryKey = AutoTable.MyPrimaryKey  

Это работает в SQL Sever 2005 и последующих версиях, поддерживающих ROW_NUMBER()

Ответ 8

для типа данных UNIQUEIDENTITIFIER в sql server попробуйте это

Alter table table_name
add ID UNIQUEIDENTIFIER not null unique default(newid())

Если вы хотите создать первичный ключ из этого столбца, используйте этот

ALTER TABLE table_name
ADD CONSTRAINT PK_name PRIMARY KEY (ID);