¿Cómo cambiar el nombre de una tabla en SQL Server?


370

La SQLconsulta que he usado es:

ALTER TABLE oldtable RENAME TO newtable;

Pero, me da un error.

Servidor: Mensaje 156, Nivel 15, Estado 1, Línea 1
Sintaxis incorrecta cerca de la palabra clave 'TO'.

Respuestas:


683

Para cambiar el nombre de una tabla en SQL Server, use el sp_renamecomando:

exec sp_rename 'schema.old_table_name', 'new_table_name'

77
Una cosa más: si alguno de los nombres de la tabla tiene un nombre ., úselo []alrededor del nombre de la tabla. (Lo sé, lo sé, pero pueden suceder puntos ...) Por ejemplo, sp_rename '[Stupid.name]', 'NewName'o con un esquemasp_rename '[dbo.Stupid.name]', 'NewName'
— vacip

55
Y para agregar, no coloque accidentalmente el esquema en el 'NewName'campo, de lo contrario su tabla podría terminar pareciendo algo así dbo.dbo.NewName.
— Michael Plautz el

44
Tenga en cuenta que al cambiar el nombre de una tabla, es casi seguro que también desee cambiar el nombre de cualquier referencia a esa tabla que pueda existir en procedimientos almacenados, vistas, funciones, etc. Un google rápido puede encontrar una de las muchas herramientas que pueden hacer esto por usted . O puede usar un script que encuentre una cadena dada en todos estos objetos, y pegarlos como declaraciones ALTER, y hacer una búsqueda y reemplazar, luego ejecutarlos todos.
— MGOwen

2
También puede crear un sinónimo con el nombre del antiguo nombre de la tabla que apunta a la nueva tablaCREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
— Ruskin el

¡no coloque un nuevo nombre entre corchetes! de lo contrario, la tabla tendrá corchetes EN el nombre. Entonces: 'new_table_name' - es correcto, '[new_table_name]' - te meterá en problemas
— VeganHunter

143

Para renombrar una columna:

sp_rename 'table_name.old_column_name', 'new_column_name' , 'COLUMN';

Para renombrar una tabla:

sp_rename 'old_table_name','new_table_name';

No explica cómo manejar esquemas que no sean el dbo predeterminado.
— Sal

1
@Sal ¿No menos que cualquier otra respuesta aquí? ¿Estaba buscando cómo cambiar el esquema de una tabla ?
— Bacon Bits

14

Cuando use sp_rename que funciona como en las respuestas anteriores, verifique también qué objetos se ven afectados después de cambiar el nombre, esa referencia a esa tabla, porque también necesita cambiarlos

Tomé un ejemplo de código para las dependencias de la tabla en el blog de Pinal Dave aquí

USE AdventureWorks
GO
SELECT
referencing_schema_name = SCHEMA_NAME(o.SCHEMA_ID),
referencing_object_name = o.name,
referencing_object_type_desc = o.type_desc,
referenced_schema_name,
referenced_object_name = referenced_entity_name,
referenced_object_type_desc = o1.type_desc,
referenced_server_name, referenced_database_name
--,sed.* -- Uncomment for all the columns
FROM
sys.sql_expression_dependencies sed
INNER JOIN
sys.objects o ON sed.referencing_id = o.[object_id]
LEFT OUTER JOIN
sys.objects o1 ON sed.referenced_id = o1.[object_id]
WHERE
referenced_entity_name = 'Customer'

Por lo tanto, todos estos objetos dependientes también deben actualizarse

O use algún complemento si puede, algunos de ellos tienen la función de cambiar el nombre del objeto, y todos dependen también de los objetos


11

Si intentas exec sp_rename y recibe un error de LockMatchID, entonces podría ser útil agregar primero una declaración de uso [base de datos]:

Lo intenté

 exec sp_rename '[database_name].[dbo].[table_name]', 'new_table_name';
 -- Invalid EXECUTE statement using object "Object", method "LockMatchID".

Lo que tuve que hacer para arreglarlo fue reescribirlo en:

use database_name
exec sp_rename '[dbo].[table_name]', 'new_table_name';

10

Nombre de la tabla

sp_rename 'db_name.old_table_name', 'new_table_name'

Columna

sp_rename 'db_name.old_table_name.name' 'userName', 'COLUMN'

Índice

sp_rename 'db_name.old_table_name.id', 'product_ID', 'INDEX'

también disponible para estadísticas y tipos de datos


2
Para Column te falta una coma entre el primer y el segundo parámetro. Debería ser: sp_rename 'db_name.old_table_name.name', 'userName', 'COLUMN'
— sebastian.roibu


0

Nada funcionó a partir de lo propuesto aquí. Así que solo introduje los datos en una nueva tabla

SELECT * 
INTO [acecodetable].['PSCLineReason']
FROM [acecodetable].['15_PSCLineReason'];

tal vez sea útil para alguien ...

En mi caso no reconocía el nuevo esquema, también el dbo era el propietario.

ACTUALIZAR

EXECUTE sp_rename N'[acecodetable].[''TradeAgreementClaim'']', N'TradeAgreementClaim';

Trabajó para mi. Lo encontré en el script generado automáticamente al actualizar el PK para una de las tablas. De esta manera, también reconoció el nuevo esquema.


0

Para cambiar el nombre de una tabla con un esquema diferente:

Ejemplo: cambie dbo.MyTable1 a wrk.MyTable2

EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'

ALTER SCHEMA wrk TRANSFER dbo.MyTable2
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.