Как переименовать столбец в таблице базы данных с помощью SQL? - PullRequest
103 голосов
/ 06 октября 2008

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

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

Ответы [ 11 ]

110 голосов
/ 06 октября 2008

Специально для SQL Server используйте sp_rename

USE AdventureWorks;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
92 голосов
/ 06 октября 2008

В 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
32 голосов
/ 05 июня 2015

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

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

Обратите внимание, что вы не можете просто переименовать и оставить тип и ограничения как есть; Вы должны заново ввести тип данных и ограничения после нового имени столбца.

19 голосов
/ 31 июля 2015

Я думаю, что это самый простой способ изменить имя столбца.

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'
18 голосов
/ 25 октября 2013

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

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;

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

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

9 голосов
/ 11 октября 2008

В Informix вы можете использовать:

RENAME COLUMN TableName.OldName TO NewName;

Это было реализовано до того, как стандарт SQL решил проблему - если он решен в стандарте SQL. Моя копия стандарта SQL 9075: 2003 не показывает его как стандарт (среди прочего, RENAME не является одним из ключевых слов). Я не знаю, действительно ли это в SQL 9075: 2008.

5 голосов
/ 13 октября 2016

В SQL Server вы можете использовать

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

или

sp_rename '<TableName.OldColumnName>','<NewColumnName>','COLUMN'
4 голосов
/ 06 апреля 2017

Вы можете использовать следующую команду для переименования столбца любой таблицы в SQL Server:

exec sp_rename 'TableName.OldColumnName', 'New colunmName'
3 голосов
/ 06 октября 2008

ALTER TABLE - это стандартный SQL. Но это не полностью реализовано во многих системах баз данных.

2 голосов
/ 11 октября 2008

Стандарт будет ALTER TABLE, но это не обязательно поддерживается каждой СУБД, с которой вы, вероятно, столкнетесь, поэтому, если вы ищете всеобъемлющий синтаксис, вам может не повезти.

...