¿Cómo cambio el nombre de una columna en una tabla de base de datos usando SQL?

113

Si simplemente deseo cambiar el nombre de una columna (no cambiar su tipo o restricciones, solo su nombre) en una base de datos SQL usando SQL, ¿cómo lo hago? ¿O acaso no es posible?

Esto es para cualquier base de datos que afirme ser compatible con SQL, simplemente estoy buscando una consulta específica de SQL que funcione independientemente de la implementación real de la base de datos.

MetroidFan2002
fuente
2
En segundo lugar, skaffman, esta no es una pregunta "SQL", es (tal vez) una pregunta "SQLServer".
Tony Andrews
1
Cualquier sistema de base de datos que pretenda utilizar SQL. Oracle, MySQL, etc ... Estoy buscando una respuesta independiente de la base de datos.
MetroidFan2002

Respuestas:

97

En PostgreSQL (y muchos otros RDBMS), puede hacerlo con una ALTER TABLEdeclaración 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
fuente
10
Esto no es compatible con MySQL, ¿verdad?
ustun
5
No, no es compatible con MySQL
rick
4
Esto tampoco es compatible con Microsoft SQL Server. En su lugar, use sp_renamesegún la respuesta de Galwegian: stackoverflow.com/a/174586/834431
Chris
Creo que MySQL 8.0 ahora admite esta sintaxis
Dan
118

Específicamente para SQL Server, use sp_rename

USE AdventureWorks;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
Galwegian
fuente
Parece específico de Microsoft y nada en la consulta original indicaba un DBMS de Microsoft.
bortzmeyer
1
Sí, la respuesta que estaba buscando es SQL "estándar" y no depende de ninguna implementación en particular. Sin embargo, es una buena respuesta para cualquiera que use el sistema de Microsoft.
MetroidFan2002
35

En MySQL, la sintaxis es ALTER TABLE ... CHANGE:

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

Tenga en cuenta que no puede simplemente cambiar el nombre y dejar el tipo y las restricciones como están; debe volver a escribir el tipo de datos y las restricciones después del nuevo nombre de la columna.

jasfer chloe
fuente
se prueba en la base de datos mySQL
jaspher chloe
2
Podemos simplemente cambiar el nombre de la columna sin afectar el tipo / restricción con la RENAMEsintaxis. Cambiar el nombre de una columna en MySQL
Lukasz Szozda
21

Desafortunadamente, para una solución independiente de la base de datos, necesitará saber todo sobre la columna. Si se usa en otras tablas como clave externa, también será necesario modificarlas.

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 los casos más simples (sin restricciones, activadores, índices o claves), se necesitarán las 3 líneas anteriores. Para algo más complicado, puede resultar muy complicado a medida que completa las partes que faltan.

Sin embargo, como se mencionó anteriormente, existen métodos específicos de base de datos más simples si sabe qué base de datos necesita modificar antes de tiempo.

Hombre de la sombra
fuente
Responde directamente la pregunta, incluso si no es exactamente lo que buscaba el autor de la pregunta ...
Lambart
En el comentario, OP en realidad aclaró que esto es exactamente lo que estaba buscando.
Magnetismo
20

Creo que esta es la forma más sencilla de cambiar el nombre de una columna.

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'
Kunal Relan
fuente
esto funcionó para mí en SQL Server. No estoy seguro de si esto funciona en otros DBMS
Nic
9

En Informix, puede utilizar:

RENAME COLUMN TableName.OldName TO NewName;

Esto se implementó antes de que el estándar SQL abordara el problema, si se aborda en el estándar SQL. Mi copia del estándar SQL 9075: 2003 no lo muestra como estándar (entre otras cosas, RENAME no es una de las palabras clave). No sé si está realmente en SQL 9075: 2008.

Jonathan Leffler
fuente
2
Tampoco RENAME en SQL 2008 Draft.
Nicolas Buduroi
No AS - use TO. RENAME COLUMN TableName.OldName TO NewName; www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/…
hitzi
6

En el servidor sql puede usar

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

o

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

Puede usar el siguiente comando para cambiar el nombre de la columna de cualquier tabla en SQL Server:

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

ALTER TABLE es SQL estándar. Pero no está completamente implementado en muchos sistemas de bases de datos.

Paul Tomblin
fuente
Acepté la respuesta de Bortz sobre la tuya porque dio una explicación detallada. Sin embargo, te voté a favor.
MetroidFan2002
@ MetroidFan2002 - Solo agregué mi respuesta para reconocer que "ALTER TABLE" no es solo PostgreSQL, es bastante común.
Paul Tomblin
2

El estándar sería ALTER TABLE, pero eso no es necesariamente compatible con todos los DBMS que probablemente encuentre, por lo que si está buscando una sintaxis que lo abarque todo, es posible que no tenga suerte.

Robar
fuente
0

Alternativamente a SQL , puede hacerlo en Microsoft SQL Server Management Studio, desde el Panel de diseño de la tabla.

Primer camino

Haga doble clic lento en la columna. El nombre de la columna se convertirá en un cuadro de texto editable.

Segunda vía

SqlManagement Studio >> Bases de datos >> tablas >> tabla específica >> Carpeta de columna >> Haga clic derecho en la columna >> Reman

Tercera vía

Tabla >> RightClick >> Diseño

Uzair Xlade
fuente