Вопрос по sql-server, sql – Добавить столбец в существующую таблицу и присвоить им уникальные номера

111

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

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

Это будет зависеть от базы данных. Вы должны указать, с какой базой данных вы работаете. dvorak
Я работаю в SQL Server. Adhip Gupta
Вы должны отредактировать свой вопрос, чтобы упомянуть об этом. dvorak

Ваш Ответ

8   ответов
0

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

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

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

alter table mytable add (myfield integer);

update mytable set myfield = rownum;
0

IDENTITY (автоинкремент), или если вы хотите точно указать порядок, в котором пронумерованы ваши строки, вы можете добавить столбец типа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()

0

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

4

льным типом и флагом IDENTITY, и это должно помочь

Проверьте эту статью MSDNhttp://msdn.microsoft.com/en-us/library/aa275462(SQL.80).aspx по синтаксису ALTER TABLE

7

только если вы хотите, чтобы «id» был ключом):

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

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

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY

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

Извините, это старый, но в заголовке написано SQL server.
Я также могу подтвердить, что это действительно работает для MySQL; Я просто добавил увеличивающееся поле идентификатора в существующую неиндексированную таблицу, и каждая строка получила новый уникальный идентификатор.
200

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

alter table Example
add NewColumn int identity(1,1)
Это сработало прекрасно и добавило все нужные мне номера автоматически. Спасибо!
Если у вас есть проблемы с внесением изменений в графический интерфейс студии управления, вы можете изменить настройки в / Инструменты / Параметры / Дизайнер / Таблица и База данных Desiger, вы найдете флажокPrevent saving changes that require table re-creation снимите этот флажок, и вы сможете добавить столбец идентификации даже с помощью графического интерфейса.

Похожие вопросы