2008-10-06 21 views
87

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

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

+1

¿Qué sistema de base de datos? – skaffman

+1

Secundando skaffman, esta no es una pregunta "SQL", es (tal vez) una pregunta "SQLServer". –

+1

Cualquier sistema de base de datos que pretenda usar SQL. Oracle, MySQL, etc. Estoy buscando una respuesta independiente de la base de datos. – MetroidFan2002

Respuesta

78

En PostgreSQL (y muchos otros RDBMS), puede hacerlo con ALTER TABLE declaración periódica:

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

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

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

Esto no es compatible con MySQL, ¿o sí? – ustun

+3

No, no es compatible con MySQL – rick

+4

Esto tampoco es compatible con Microsoft SQL Server. En su lugar, use 'sp_rename' según la respuesta de Galwegian: http://stackoverflow.com/a/174586/834431 – Chris

96

Específicamente para SQL Server, utilice sp_rename

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

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

+0

He editado la respuesta para tener esto en cuenta –

3

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

+0

Acepté la respuesta de bortz sobre la tuya porque me dio una explicación detallada. Sin embargo, te voté. – MetroidFan2002

+0

@ MetroidFan2002 - Solo agregué mi respuesta para reconocer que "ALTER TABLE" no es solo PostgreSQL, sino que es bastante común. –

9

En Informix, puede utilizar:

RENAME COLUMN TableName.OldName TO NewName; 

Esto se llevó a cabo antes de que el estándar SQL abordó la cuestión - si se trata 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 realmente está en SQL 9075: 2008.

+2

No RENAME en SQL 2008 Draft también. –

+0

Not AS - use TO. 'RENAME TableName.OldName columna para NuevoNombre;' http://www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/com.ibm.sqls.doc/ids_sqs_0939.htm – hitzi

+0

Gracias - fijo ! –

2

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

14

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

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 el caso más simple (sin restricciones, activadores, índices o claves), tomará las 3 líneas anteriores. Para algo más complicado, puede ser muy complicado a medida que completas las partes faltantes.

Sin embargo, como se mencionó anteriormente, hay métodos más simples de base de datos específicos si sabe qué base de datos necesita modificar con anticipación.

+0

Responde directamente la pregunta, incluso si no es exactamente lo que el solicitante estaba buscando ... – Lambart

-1

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

primera forma

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

segunda forma

SqlManagement Estudio >> Bases de datos >> >> mesas specificTable >> Columna carpeta >> Haga clic derecho en la columna >> Reman

tercera vía

tabla >> RightClick >> Diseño

25

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.

+0

se prueba en la base de datos mySQL –

15

Creo que esta es la forma más fácil de cambiar el nombre de la columna.

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME' 
+0

esto funcionó para mí en SQL Server. No estoy seguro si esto funciona en otro DBMS – Nic

4

En SQL Server puede utilizar

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

o

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

Usted puede utilizar el siguiente comando para cambiar el nombre de la columna de cualquier tabla en SQL Server:

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