Добавить столбец в существующую таблицу и однозначно пронумеровать их на MS SQL Server

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

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


person Adhip Gupta    schedule 20.09.2008    source источник
comment
Это будет зависеть от базы данных. Вы должны указать, с какой базой данных вы работаете.   -  person dvorak    schedule 20.09.2008
comment
Вы должны отредактировать свой вопрос, чтобы упомянуть об этом.   -  person dvorak    schedule 20.09.2008


Ответы (8)


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

alter table Example
add NewColumn int identity(1,1)
person Simon Johnson    schedule 20.09.2008
comment
Это прекрасно сработало и автоматически добавило все нужные числа. Спасибо! - person djangofan; 25.10.2011
comment
Если у вас есть проблемы с внесением изменений в графический интерфейс студии управления, вы можете изменить настройки в / Tools / Options / Designer / Table and Database Desiger, вы найдете флажок Prevent saving changes that require table re-creation снимите этот флажок, и вы сможете добавить столбец идентификатора даже с помощью графический интерфейс. - person surfmuggle; 05.11.2012

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

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY

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

person Tom Martin    schedule 20.09.2008
comment
Я также могу подтвердить, что это действительно работает для MySQL; Я просто добавил поле увеличивающегося идентификатора в существующую неиндексированную таблицу, и каждая строка получила уникальный новый идентификатор. - person Doug Kavendek; 12.07.2011
comment
Извините, это старый, но в названии написан SQL-сервер. - person Nick; 24.07.2012

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

alter table mytable add (myfield integer);

update mytable set myfield = rownum;
person Roy Tang    schedule 20.09.2008

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

ALTER TABLE tableName ADD id SERIAL;
ALTER TABLE tableName ADD PRIMARY KEY (id);
person Flavien Volken    schedule 07.09.2011

Просто использование ALTER TABLE должно работать. Добавьте столбец с правильным типом и флагом IDENTITY, и он должен помочь

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

person Ilya Kochetov    schedule 20.09.2008

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

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

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

ALTER TABLE table_name
ADD CONSTRAINT PK_name PRIMARY KEY (ID);
person Snziv Gupta    schedule 27.12.2017

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

person Joshua    schedule 20.09.2008

Если вы не хотите, чтобы ваш новый столбец имел тип 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()

person Jinlye    schedule 21.04.2017