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


121

Я хочу додати стовпчик до існуючої застарілої бази даних і написати процедуру, за допомогою якої я можу призначити кожному запису інше значення. Щось на зразок додавання стовпця та автогенерації даних для нього.

Наприклад, якщо я додам новий стовпець під назвою "ID" (число), я хочу ініціалізувати унікальне значення для кожного із записів. Отже, у моєму стовпчику посвідчень буде записано записи 1 to 1000.
Як це зробити?


2
Це буде специфічно для бази даних. Ви повинні вказати, з якою базою даних ви працюєте.
дворак

1
Ви повинні відредагувати своє запитання, щоб згадати про це.
дворак

Відповіді:


221

Це залежатиме від бази даних, але для SQL Server це можна досягти наступним чином:

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

5
Це працювало чудово і додав усі потрібні мені цифри автоматично. Дякую!
djangofan

9
Якщо у вас виникли проблеми із змінами в gui студії управління, ви можете змінити налаштування в розділі / Інструменти / Параметри / Дизайнер / Таблиця та база даних Desiger, ви знайдете прапорець, Prevent saving changes that require table re-creationзніміть цей прапорець, і ви зможете додати стовпчик посвідчення навіть за допомогою gui.
surfmuggle

22

Це допоможе, якщо ви опублікували ту базу даних, яку ви використовуєте. Для MySQL ви, мабуть, бажаєте auto_increment:

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY

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


7
Я можу також підтвердити, що це дійсно працює для MySQL; Я щойно додав поле приросту id до існуючої недекларованої таблиці, і кожен рядок отримав новий унікальний ідентифікатор.
Дуг Кавендек

Вибачте його старий, але в заголовку він сказав SQL-сервер.
Нік

11

для oracle ви можете зробити щось на кшталт нижче

alter table mytable add (myfield integer);

update mytable set myfield = rownum;

8

І еквівалент Postgres (другий рядок є обов'язковим, лише якщо ви бажаєте, щоб "id" був ключем):

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


3

для типу даних 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);

0

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


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()

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.