Как переименовать столбец в таблице базы данных с помощью SQL?

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

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

Второй скаффман, это не вопрос "SQL", это (возможно) вопрос "SQLServer".

Tony Andrews 06.10.2008 19:04

Любая система баз данных, претендующая на использование SQL. Oracle, MySQL и т. д. Я ищу независимый от базы данных ответ.

MetroidFan2002 06.10.2008 19:08
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
118
2
529 298
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

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

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

Кажется, что это специфично для Microsoft, и ничто в исходном запросе не указывало на СУБД Microsoft.

bortzmeyer 06.10.2008 18:54

Да, я искал «стандартный» SQL, не зависящий от какой-либо конкретной реализации. Однако это хороший ответ для всех, кто пользуется системой Microsoft.

MetroidFan2002 06.10.2008 19:12
Ответ принят как подходящий

В PostgreSQL (и многих других СУБД) вы можете сделать это с помощью обычного оператора 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

Это не поддерживается в MySQL, не так ли?

ustun 21.10.2011 15:41

Нет, не поддерживается в MySQL

rick 13.05.2013 23:16

Это также не поддерживается в Microsoft SQL Server. Вместо этого используйте sp_rename в соответствии с ответом Галвэя: stackoverflow.com/a/174586/834431

Chris 11.12.2013 17:15

Я считаю, что MySQL 8.0 теперь поддерживает этот синтаксис

Dan 23.04.2020 20:41

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

Я принял ответ Борца вместо твоего, потому что он дал подробное объяснение. Тем не менее, я поддержал вас.

MetroidFan2002 06.10.2008 19:10

@ MetroidFan2002 - Я добавил свой ответ только для того, чтобы признать, что «ALTER TABLE» - это не просто PostgreSQL, это довольно распространенное явление.

Paul Tomblin 06.10.2008 22:04

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

RENAME COLUMN TableName.OldName TO NewName;

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

В проекте SQL 2008 также нет ПЕРЕИМЕНОВАНИЯ.

Nicolas Buduroi 22.12.2009 07:36

Не КАК - используйте ТО. RENAME COLUMN TableName.OldName TO NewName;www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/…

hitzi 16.12.2014 15:41

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

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

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 строки, указанные выше. Для чего-то более сложного это может стать очень беспорядочным, поскольку вы заполняете недостающие части.

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

Непосредственно отвечает на вопрос, даже если это не совсем то, что искал спрашивающий ...

Lambart 17.07.2015 21:52

В комментарии OP фактически пояснил, что это именно то, что он искал.

MagneTism 15.08.2018 08:05

В качестве альтернативы SQL вы можете сделать это в Microsoft SQL Server Management Studio из панели дизайна таблицы.

Первый путь

Медленно дважды щелкните столбец. Имя столбца станет редактируемым текстовым полем.

Второй путь

SqlManagement Studio>>DataBases>>tables>>specificTable>>Column Folder>>Right Click on column>>Reman

Третий путь

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

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

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

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

он протестирован в базе данных mySQL

jaspher chloe 05.06.2015 14:33

Мы можем просто переименовать столбец, не затрагивая тип / ограничение с синтаксисом RENAME. Переименовать столбец в MySQL

Lukasz Szozda 15.09.2018 18:42

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

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'

это сработало для меня на SQL Server. Я не уверен, работает ли это на других СУБД

Nic 11.01.2017 17:01

На сервере sql вы можете использовать

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

или же

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

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

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

Другие вопросы по теме