Як перейменувати стовпець у таблиці бази даних за допомогою SQL?


113

Якщо я хочу просто перейменувати стовпець (а не змінити його тип чи обмеження, просто його ім'я) у базі даних SQL за допомогою SQL, як це зробити? Або це неможливо?

Це для будь-якої бази даних, яка претендує на підтримку SQL, я просто шукаю специфічний для SQL запит, який буде працювати незалежно від фактичної реалізації бази даних.


2
Відправляючи скафмана, це не питання "SQL", це (можливо) питання "SQLServer".
Тоні Ендрюс

1
Будь-яка система бази даних, яка має намір використовувати SQL. Oracle, MySQL тощо ... Я шукаю відповідь, незалежна від бази даних.
MetroidFan2002

Відповіді:


97

У PostgreSQL (і багатьох інших RDBMS) ви можете це робити за допомогою звичайного ALTER TABLEоператора:

=> SELECT * FROM Test1;
 id | foo | bar 
----+-----+-----
  2 |   1 |   2

=> ALTER TABLE Test1 RENAME COLUMN foo TO baz;
ALTER TABLE

=> SELECT * FROM Test1;
 id | baz | bar 
----+-----+-----
  2 |   1 |   2

10
Це не підтримується в MySQL, чи не так?
ustun

5
Ні, його не підтримується в MySQL
рик

4
Це також не підтримується в Microsoft SQL Server. Замість того, щоб використовувати sp_renameвідповідно з відповіддю Galwegian в: stackoverflow.com/a/174586/834431
Крісу

Я вважаю , що MySQL 8.0 підтримує цей синтаксис в даний час
Dan

118

Спеціально для SQL Server використовуйте sp_rename

USE AdventureWorks;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO

Здається, що Microsoft є специфічним, і нічого в оригінальному запиті не вказувалось на СУБД Microsoft.
борцмейєр

1
Так, відповідь, яку я шукав, "стандартний" SQL і не залежить від конкретної реалізації. Однак це хороша відповідь для всіх, хто використовує систему Microsoft.
MetroidFan2002

35

У MySQL синтаксис ALTER TABLE ... CHANGE:

ALTER TABLE <table_name> CHANGE <column_name> <new_column_name> <data_type> ...

Зауважте, що ви не можете просто перейменувати і залишити тип та обмеження як є; ви повинні повторно вказати тип даних та обмеження після нової назви стовпця.


вона перевірена в базі даних mySQL
jaspher chloe

2
Ми можемо просто перейменувати стовпець, не впливаючи на тип / обмеження на RENAMEсинтаксис. Перейменуйте стовпчик у MySQL
Lukasz Szozda

21

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

ALTER TABLE MyTable ADD MyNewColumn OLD_COLUMN_TYPE;
UPDATE MyTable SET MyNewColumn = MyOldColumn;
-- add all necessary triggers and constraints to the new column...
-- update all foreign key usages to point to the new column...
ALTER TABLE MyTable DROP COLUMN MyOldColumn;

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

Однак, як було сказано вище, існують більш прості методи, характерні для бази даних, якщо ви знаєте, яку базу даних потрібно змінити заздалегідь.


Безпосередньо відповідає на питання, навіть якщо це не зовсім те, що шукав
шукач

У коментарі ОП фактично уточнив, що це саме те, що він шукав.
MagneTism

20

Я думаю, що це найпростіший спосіб змінити назву стовпця.

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'

це працювало для мене на SQL Server. Я не впевнений , якщо це працює на інших СУБД
Nic

9

У Informix ви можете використовувати:

RENAME COLUMN TableName.OldName TO NewName;

Це було реалізовано до того, як стандарт SQL вирішив цю проблему - якщо вона адресована в стандарті SQL. Моя копія стандарту SQL 9075: 2003 не відображає його як стандарт (серед іншого, RENAME не є одним із ключових слів). Я не знаю, чи це насправді в SQL 9075: 2008.


2
У проекті SQL 2008 також немає RENAME.
Nicolas Buduroi

Не ЯК - використовуйте ТО. RENAME COLUMN TableName.OldName TO NewName; www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/…
hitzi

6

На сервері sql ви можете використовувати

exec sp_rename '<TableName.OldColumnName>','<NewColumnName>','COLUMN'

або

sp_rename '<TableName.OldColumnName>','<NewColumnName>','COLUMN'

6

Ви можете використовувати таку команду для перейменування стовпця будь-якої таблиці в SQL Server:

exec sp_rename 'TableName.OldColumnName', 'New colunmName'

3

ALTER TABLE - це стандартний SQL. Але він не повністю реалізований у багатьох системах баз даних.


Я прийняв відповідь борца над вашою, тому що він дав детальне пояснення. Тим не менш, я підтримав вас.
MetroidFan2002

@ MetroidFan2002 - Я лише додав свою відповідь, щоб визнати, що "ALTER TABLE" - це не лише PostgreSQL, це досить поширене явище.
Пол Томблін

2

Стандарт був би ALTER TABLE, але це не обов'язково підтримується кожною СУБД, з якою ви зіткнулися, тому, якщо ви шукаєте всеохоплюючий синтаксис, можливо, вам не пощастить.


0

Крім того SQL, ви можете це зробити в Microsoft SQL Server Management Studio, з панелі дизайну таблиці.

Перший шлях

Повільно двічі клацніть на стовпчику. Назва стовпця стане редагованим текстовим полем.

Другий шлях

SqlManagement Studio >> Бази даних >> таблиці >> конкретніТаблиця >> Папка стовпців >> Клацніть правою кнопкою миші на стовпці >> Реман

Третій шлях

Таблиця >> RightClick >> Дизайн

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