Ответ 1
Это будет зависеть от базы данных, но для SQL Server это может быть достигнуто следующим образом:
alter table Example
add NewColumn int identity(1,1)
Я хочу добавить столбец в существующую устаревшую базу данных и написать процедуру, с помощью которой я могу присвоить каждой записи другое значение. Что-то вроде добавления столбца и автогенерации данных для него.
Например, если я добавлю новый столбец с именем "ID" (число), я хочу затем инициализировать уникальное значение для каждой из записей. Итак, в моем столбце ID будут указаны записи от 1 до 1000. Как мне это сделать?
Это будет зависеть от базы данных, но для SQL Server это может быть достигнуто следующим образом:
alter table Example
add NewColumn int identity(1,1)
Это поможет, если вы опубликуете, какую базу данных SQL вы используете. Для MySQL вы, вероятно, хотите auto_increment:
ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY
Не уверен, что это применимо к значениям ретроактивно. Если это не так, вы должны просто иметь возможность перебирать свои значения с помощью хранимой процедуры или в простой программе (если никто не пишет в базу данных), и используйте функцию LAST_INSERT_ID()
для генерации значения id.
для оракула вы можете сделать что-то вроде ниже
alter table mytable add (myfield integer);
update mytable set myfield = rownum;
И эквивалент Postgres (вторая строка является обязательной, только если вы хотите, чтобы "id" был ключом):
ALTER TABLE tableName ADD id SERIAL;
ALTER TABLE tableName ADD PRIMARY KEY (id);
Просто использование ALTER TABLE должно работать. Добавьте столбец соответствующего типа и флаг IDENTITY, и он должен сделать трюк
Ознакомьтесь с этой статьей MSDN http://msdn.microsoft.com/en-us/library/aa275462(SQL.80).aspx в синтаксисе ALTER TABLE
Зависит от базы данных, так как каждая база данных имеет другой способ добавления порядковых номеров. Я бы изменил таблицу, чтобы добавить столбец, а затем написать db script в groovy/python/etc, чтобы прочитать данные и обновить идентификатор с помощью последовательности. Как только данные будут установлены, я бы добавил последовательность в таблицу, которая начинается после верхнего номера. Как только данные будут установлены, правильно установите первичные ключи.
Если вы не хотите, чтобы ваш новый столбец имел тип 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()
для типа данных 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);