Como faço para renomear uma coluna em uma tabela de banco de dados usando SQL?

113

Se eu quiser simplesmente renomear uma coluna (não alterar seu tipo ou restrições, apenas seu nome) em um banco de dados SQL usando SQL, como faço isso? Ou isso não é possível?

Isso é para qualquer banco de dados que alega oferecer suporte a SQL. Estou simplesmente procurando uma consulta específica de SQL que funcione independentemente da implementação real do banco de dados.

MetroidFan2002
fonte
2
Secundando skaffman, esta não é uma questão "SQL", é (talvez) uma questão "SQLServer".
Tony Andrews
1
Qualquer sistema de banco de dados que pretenda usar SQL. Oracle, MySQL, etc ... Estou procurando uma resposta independente de banco de dados.
MetroidFan2002

Respostas:

97

No PostgreSQL (e em muitos outros RDBMS), você pode fazer isso com uma ALTER TABLEinstrução regular :

=> 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
bortzmeyer
fonte
10
Isso não é compatível com MySQL, certo?
início de
5
Não, não é compatível com MySQL
rick
4
Isso também não é compatível com o Microsoft SQL Server. Em vez disso, use de sp_renameacordo com a resposta de Galwegian: stackoverflow.com/a/174586/834431
Chris
Eu acredito que o MySQL 8.0 suporta esta sintaxe agora
Dan
118

Especificamente para SQL Server, use sp_rename

USE AdventureWorks;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
Galuego
fonte
Parece específico da Microsoft e nada na consulta original indicava um DBMS da Microsoft.
bortzmeyer
1
Sim, a resposta que eu procurava é SQL "padrão" e não depende de nenhuma implementação específica. No entanto, é uma boa resposta para quem usa o sistema da Microsoft.
MetroidFan2002
35

No MySQL, a sintaxe é ALTER TABLE ... CHANGE:

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

Observe que você não pode simplesmente renomear e deixar o tipo e as restrições como estão; você deve digitar novamente o tipo de dados e as restrições após o novo nome da coluna.

jaspher chloe
fonte
ele é testado no banco de dados mySQL
jaspher chloe
2
Podemos simplesmente renomear a coluna sem afetar o tipo / restrição com a RENAMEsintaxe. Renomear uma coluna em MySQL
Lukasz Szozda
21

Infelizmente, para uma solução independente de banco de dados, você precisará saber tudo sobre a coluna. Se for usado em outras tabelas como uma chave estrangeira, eles também precisarão ser modificados.

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;

Para os casos mais simples (sem restrições, gatilhos, índices ou chaves), serão necessárias as 3 linhas acima. Para qualquer coisa mais complicada, pode ficar muito confuso conforme você preenche as partes ausentes.

No entanto, conforme mencionado acima, existem métodos específicos de banco de dados mais simples se você souber qual banco de dados precisa modificar com antecedência.

Homem sombra
fonte
Responde diretamente à pergunta, mesmo que não seja exatamente o que o autor da pergunta estava procurando ...
Lambart
No comentário, OP realmente esclareceu que isso é exatamente o que ele estava procurando.
MagneTism
20

Acho que essa é a maneira mais fácil de alterar o nome da coluna.

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'
Kunal Relan
fonte
isso funcionou para mim no SQL Server. Não tenho certeza se isso funciona em outro DBMS
Nic
9

No Informix, você pode usar:

RENAME COLUMN TableName.OldName TO NewName;

Isso foi implementado antes que o padrão SQL resolvesse o problema - se for abordado no padrão SQL. Minha cópia do padrão SQL 9075: 2003 não o mostra como padrão (entre outras coisas, RENAME não é uma das palavras-chave). Não sei se realmente está no SQL 9075: 2008.

Jonathan Leffler
fonte
2
Não há RENAME no SQL 2008 Draft também.
Nicolas Buduroi
Não AS - use TO. RENAME COLUMN TableName.OldName TO NewName; www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/…
hitzi
6

No servidor sql você pode usar

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

ou

sp_rename '<TableName.OldColumnName>','<NewColumnName>','COLUMN'
Bimzee
fonte
6

Você pode usar o seguinte comando para renomear a coluna de qualquer tabela no SQL Server:

exec sp_rename 'TableName.OldColumnName', 'New colunmName'
Prabhat Kumar Yadav
fonte
3

ALTER TABLE é o SQL padrão. Mas não está completamente implementado em muitos sistemas de banco de dados.

Paul Tomblin
fonte
Aceitei a resposta de Bortz em vez da sua porque ele deu uma explicação detalhada. No entanto, eu votei contra você.
MetroidFan2002
@ MetroidFan2002 - Eu apenas adicionei minha resposta para reconhecer que "ALTER TABLE" não é apenas PostgreSQL, é bastante comum.
Paul Tomblin
2

O padrão seria ALTER TABLE, mas não é necessariamente suportado por todos os SGBDs que você provavelmente encontrará, portanto, se estiver procurando uma sintaxe abrangente, pode estar sem sorte.

Roubar
fonte
0

Como alternativa SQL, você pode fazer isso no Microsoft SQL Server Management Studio, no Painel de projeto da tabela.

Primeira Via

Clique duas vezes lentamente na coluna. O nome da coluna se tornará uma caixa de texto editável.

Segunda via

SqlManagement Studio >> DataBases >> tabelas >> specificTable >> Pasta da coluna >> Clique com o botão direito na coluna >> Reman

Terceira via

Tabela >> Clique com o botão direito >> Design

Uzair Xlade
fonte