Estoy usando SQL Server 2008 y Navicat. Necesito cambiar el nombre de una columna en una tabla usando SQL.
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
Esta afirmación no funciona.
Estoy usando SQL Server 2008 y Navicat. Necesito cambiar el nombre de una columna en una tabla usando SQL.
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
Esta afirmación no funciona.
Respuestas:
Utilizar sp_rename
EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'
Consulte: SERVIDOR SQL: cómo cambiar el nombre de una columna o de una tabla
Documentación: sp_rename (Transact-SQL)
Para su caso sería:
EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'
Recuerde usar comillas simples para encerrar sus valores.
EXEC sp_RENAME '[TableName].[OldColumnName]', 'NewColumnName', 'COLUMN'
alter table
que pueden fallar si existen tales restricciones.
Alternativamente SQL
, puede hacerlo en Microsoft SQL Server Management Studio. Aquí hay algunas formas rápidas de usar la GUI:
Haga doble clic lento en la columna. El nombre de la columna se convertirá en un cuadro de texto editable.
Haga clic derecho en la columna y elija Cambiar nombre en el menú contextual.
Por ejemplo:
De esta manera es preferible cuando necesita cambiar el nombre de varias columnas de una vez.
Por ejemplo:
NOTA: Sé que OP solicitó específicamente una solución SQL, pensé que esto podría ayudar a otros :)
También debe especificar el esquema de la tabla o puede obtener este error:
Mensaje 15248, Nivel 11, Estado 1, Procedimiento sp_rename, Línea 238 O bien el parámetro @objname es ambiguo o el @objtype (COLUMNA) reclamado es incorrecto.
Si se trata de un script de implementación, también recomendaría agregarle seguridad adicional.
IF EXISTS (
SELECT 1
FROM sys.columns
WHERE
name = 'OldColumnName' AND
object_name(object_id) = 'TableName'
) AND
NOT EXISTS (
SELECT 1
FROM sys.columns
WHERE
name = 'NewColumnName' AND
object_name(object_id) = 'TableName'
)
EXEC sp_RENAME 'SchemaName.TableName.OldColumnName', 'NewColumnName', 'COLUMN';
Sería una buena sugerencia utilizar una función ya incorporada, pero otra forma de hacerlo es:
El beneficio detrás de usar el sp_rename
es que se encarga de todas las relaciones asociadas con él.
De la documentación :
sp_rename cambia automáticamente el nombre del índice asociado cada vez que se cambia el nombre de una restricción PRIMARY KEY o UNIQUE. Si un índice renombrado está vinculado a una restricción PRIMARY KEY, la restricción PRIMARY KEY también se renombra automáticamente mediante sp_rename. sp_rename se puede usar para renombrar índices XML primarios y secundarios.
Puede usar sp_rename
para cambiar el nombre de una columna.
USE YourDatabase;
GO
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';
GO
El primer parámetro es el objeto a modificar, el segundo parámetro es el nuevo nombre que se le dará al objeto, y el tercer parámetro COLUMN informa al servidor que el cambio de nombre es para el column
, y también se puede usar para cambiar el nombre tables
, index
y alias data type
.
Como a menudo vengo aquí y luego me pregunto cómo usar los corchetes, esta respuesta podría ser útil para personas como yo.
EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN';
OldColumnName
no debe estar adentro []
. No funcionará.NewColumnName
en []
, que se traducirá en [[NewColumnName]]
.Sql Server Management Studio tiene algunos procedimientos almacenados (SP) definidos por el sistema,
uno de los cuales se utiliza para cambiar el nombre de una columna. El SP es sp_rename
Sintaxis: sp_rename '[nombre_tabla] .old_column_name', 'new_column_name'
Para obtener más ayuda, consulte este artículo: sp_rename por Microsoft Docs
Nota: Al ejecutar este SP, el servidor sql le dará un mensaje de precaución como ' Precaución: cambiar cualquier parte del nombre de un objeto podría romper los scripts y los procedimientos almacenados '. Esto es crítico solo si ha escrito su propio sp que involucra la columna en la tabla que estás a punto de cambiar.
Versión mejorada de @Taher
DECLARE @SchemaName AS VARCHAR(128)
DECLARE @TableName AS VARCHAR(128)
DECLARE @OldColumnName AS VARCHAR(128)
DECLARE @NewColumnName AS VARCHAR(128)
DECLARE @ParamValue AS VARCHAR(1000)
SET @SchemaName = 'dbo'
SET @TableName = 'tableName'
SET @OldColumnName = 'OldColumnName'
SET @NewColumnName = 'NewColumnName'
SET @ParamValue = @SchemaName + '.' + @TableName + '.' + @OldColumnName
IF EXISTS
(
SELECT 1 FROM sys.columns WHERE name = @OldColumnName AND OBJECT_NAME(object_id) = @TableName
)
AND NOT EXISTS
(
SELECT 1 FROM sys.columns WHERE name = @NewColumnName AND OBJECT_NAME(object_id) = @TableName
)
BEGIN
EXEC sp_rename @ParamValue, @NewColumnName, 'COLUMN';
END
Ejecutar consulta:
SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'