Comparteix a través de


sp_rename (Transact-SQL)

Se aplica a: SQL Server Base de datos de Azure SQL Azure SQL Managed Instance Azure Synapse Analytics Punto de conexión de análisis SQL en Microsoft Fabric Almacén en Microsoft Fabric

Cambia el nombre de un objeto creado por el usuario en la base de datos actual. Este objeto puede ser una tabla, un índice, una columna, un tipo de datos de alias o Microsoft.

Tipo definido por el usuario de Common Language Runtime (CLR) de .NET Framework.

Importante

Algunos objetos del sistema y la sintaxis de Transact-SQL no se admiten en grupos de SQL sin servidor en Azure Synapse Analytics, incluido este artículo. Para obtener más información, visite Compatibilidad con T-SQL.

Precaución

Al cambiar cualquier parte del nombre de un objeto se pueden interrumpir scripts y procedimientos almacenados. Se recomienda no usar esta instrucción para cambiar el nombre de procedimientos almacenados, desencadenadores, funciones definidas por el usuario o vistas; en su lugar, quite el objeto y vuelva a crearlo con el nuevo nombre.

Convenciones de sintaxis de Transact-SQL

Sintaxis

Sintaxis para sp_rename en SQL Server y Azure SQL Database:

sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
    [ , [ @objtype = ] 'object_type' ]

Sintaxis para sp_rename (versión preliminar) en Azure Synapse Analytics:

sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
    , [ @objtype = ] 'COLUMN'

Sintaxis para sp_rename en Microsoft Fabric:

sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
    [ , [ @objtype = ] 'OBJECT' ]

Argumentos

[ @objname = ] 'object_name'

Nombre completo o no calificado actual del objeto de usuario o del tipo de datos. Si el nombre del objeto que se va a cambiar es una columna de una tabla, object_name debe estar en el formulario table.column o schema.table.column. Si el nombre del objeto que se va a cambiar es un índice, object_name debe estar en el formulario table.index o schema.table.index. Si el nombre del objeto que se va a cambiar es una restricción, object_name debe estar en el formato schema.constraint.

Las comillas solo se necesitan si se especifica un objeto completo. Si se proporciona un nombre completo, incluido el nombre de la base de datos, el nombre de la base de datos debe ser el de la base de datos actual. object_name es nvarchar(776), sin ningún valor predeterminado.

[ @newname = ] 'new_name'

Nuevo nombre para el objeto especificado. new_name debe ser un nombre de una parte y debe seguir las reglas de los identificadores. newname es sysname, sin ningún valor predeterminado.

Los nombres de desencadenador no pueden empezar con # o ##.

Se aplica a Warehouse en Microsoft Fabric:

  • Los nombres de esquema no pueden contener / o \ ni terminar con un ..
  • Los nombres de tabla no pueden contener / o \ ni terminar con un ..

[ @objtype = ] 'object_type'

Tipo de objeto al que se va a cambiar el nombre. object_type es varchar(13), con un valor predeterminado de NULLy puede ser uno de estos valores.

Valor Descripción
COLUMN Una columna cuyo nombre se va a cambiar.
DATABASE Una base de datos definida por el usuario. Este tipo de objeto es necesario cuando se cambia el nombre de una base de datos
INDEX Índice definido por el usuario. Si se cambia el nombre a un índice con estadísticas, también se cambia automáticamente a las estadísticas.
OBJECT Un elemento de un tipo al que se realiza un seguimiento en sys.objects. Por ejemplo, OBJECT podría utilizarse para cambiar el nombre de objetos como restricciones (CHECK, FOREIGN KEY, PRIMARY o UNIQUE KEY), tablas de usuario y reglas.
STATISTICS Se aplica a: SQL Server 2012 (11.x) y versiones posteriores, y Azure SQL Database.

Estadísticas que crea un usuario explícitamente o que se crean implícitamente con un índice. Si se cambia el nombre de las estadísticas de un índice, también se cambia automáticamente el nombre del índice.
USERDATATYPE Un tipo definido por el usuario CLR agregado mediante la ejecución de CREATE TYPE o sp_addtype.

Se aplica a: Azure Synapse Analytics

  • En sp_rename (versión preliminar) para Azure Synapse Analytics, COLUMN es un valor obligatorio que especifica que el tipo de objeto al que se va a cambiar el nombre es una columna y siempre debe incluirse en la sp_rename instrucción . Solo se puede cambiar el nombre de una columna si no es una columna de distribución. sp_rename solo se puede usar para cambiar el nombre de en COLUMN un objeto de usuario.

Se aplica a: Microsoft Fabric

  • En sp_rename para Warehouse en Microsoft Fabric, OBJECT es el único valor admitido para @objtype.
  • En sp_rename para el punto de conexión de SQL Analytics en Microsoft Fabric, OBJECT es el único valor admitido para @objtype. No se puede cambiar el nombre de las tablas.

Valores de código de retorno

0 (correcto) o un número distinto de cero (error).

Comentarios

Se aplica a SQL Server (todas las versiones compatibles) y Azure SQL Database:

  • 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 cambiado de nombre está asociado a una restricción PRIMARY KEY, la restricción PRIMARY KEY también cambia automáticamente el nombre de sp_rename.

  • sp_rename se puede usar para cambiar el nombre de los índices XML principales y secundarios.

  • Cambiar el nombre de un procedimiento almacenado, una función, una vista o un desencadenador no cambiará el nombre del objeto correspondiente en la columna de definición de la vista de catálogo sys.sql_modules o se obtiene mediante la función integrada OBJECT_DEFINITION . Por lo tanto, se recomienda no sp_rename usarse para cambiar el nombre de estos tipos de objeto. En su lugar, quite el objeto y vuelva a crearlo con su nuevo nombre.

Se aplica a SQL Server (todas las versiones compatibles), Azure SQL Database y Azure Synapse Analytics:

  • Cambiar el nombre de un objeto como una tabla o columna no cambiará automáticamente el nombre de las referencias a ese objeto. Es necesario modificar de forma manual los objetos que hacen referencia al objeto cuyo nombre se ha cambiado. Por ejemplo, si se cambia el nombre de una columna de una tabla y en un desencadenador existe una referencia a esa columna, es necesario modificar el desencadenador para reflejar el nuevo nombre de la columna. Use sys.sql_expression_dependencies para ver las dependencias del objeto antes de cambiarle el nombre.

  • Al cambiar el nombre de una columna, no se actualizan automáticamente los metadatos de los objetos que SELECCIONEN todas las columnas (mediante *) de esa tabla. Por ejemplo, si cambia el nombre de la columna de una tabla y se hace referencia a esa columna mediante una vista o función no enlazada a esquema que SELECCIONA todas las columnas (mediante *), los metadatos de la vista o función continúan reflejando el nombre de columna original. Actualice los metadatos mediante sp_refreshsqlmodule o sp_refreshview.

  • Solo se puede cambiar el nombre de un objeto o tipo de datos de la base de datos actual. Los nombres de la mayoría de los tipos de datos del sistema y los objetos del sistema no se pueden cambiar.

  • Si usa más de 128 caracteres para el nuevo nombre, solo se usan los primeros 128 caracteres y el resto se trunca.

Se aplica a Azure Synapse Analytics:

  • En Azure Synapse Analytics, sp_rename está en versión preliminar para grupos de SQL dedicados.

Permisos

Para cambiar el nombre de objetos, columnas e índices, se necesita permiso ALTER en el objeto. Para cambiar el nombre de tipos de usuario, se necesita el permiso CONTROL en el tipo. Para cambiar el nombre de una base de datos, es necesario pertenecer a los roles fijos de servidor sysadmin o dbcreator . Para cambiar el nombre de una tabla de libro de contabilidad, se requiere el permiso ALTER LEDGER.

Ejemplos

A Cambiar de nombre una tabla

En el siguiente ejemplo se cambia el nombre de la tabla SalesTerritory por SalesTerr en el esquema Sales .

USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO

B. Cambio del nombre de una columna

En el ejemplo siguiente se cambia el nombre de la TerritoryID columna de la SalesTerritory tabla a TerrID.

USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO

C. Cambiar el nombre de un índice

En el siguiente ejemplo se cambia el nombre del índice IX_ProductVendor_VendorID por IX_VendorID.

USE AdventureWorks2022;
GO
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
GO

D. Cambiar el nombre de un tipo de datos de alias

En el siguiente ejemplo se cambia el nombre del tipo de datos de alias Phone por Telephone.

USE AdventureWorks2022;
GO
EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';
GO

E. Cambiar el nombre de las restricciones

En los siguientes ejemplos se cambia el nombre de las restricciones PRIMARY KEY, CHECK y FOREIGN KEY. Al cambiar el nombre de una restricción, debe especificarse el esquema al que pertenece.

USE AdventureWorks2022;
GO
-- Return the current Primary Key, Foreign Key and Check constraints for the Employee table.
SELECT name, SCHEMA_NAME(schema_id) AS schema_name, type_desc
FROM sys.objects
WHERE parent_object_id = (OBJECT_ID('HumanResources.Employee'))
AND type IN ('C','F', 'PK');
GO

-- Rename the primary key constraint.
EXEC sp_rename 'HumanResources.PK_Employee_BusinessEntityID', 'PK_EmployeeID';
GO

-- Rename a check constraint.
EXEC sp_rename 'HumanResources.CK_Employee_BirthDate', 'CK_BirthDate';
GO

-- Rename a foreign key constraint.
EXEC sp_rename 'HumanResources.FK_Employee_Person_BusinessEntityID', 'FK_EmployeeID';

-- Return the current Primary Key, Foreign Key and Check constraints for the Employee table.
SELECT name, SCHEMA_NAME(schema_id) AS schema_name, type_desc
FROM sys.objects
WHERE parent_object_id = (OBJECT_ID('HumanResources.Employee'))
AND type IN ('C','F', 'PK');
GO
name                                  schema_name        type_desc
------------------------------------- ------------------ ----------------------
FK_Employee_Person_BusinessEntityID   HumanResources     FOREIGN_KEY_CONSTRAINT
PK_Employee_BusinessEntityID          HumanResources     PRIMARY_KEY_CONSTRAINT
CK_Employee_BirthDate                 HumanResources     CHECK_CONSTRAINT
CK_Employee_MaritalStatus             HumanResources     CHECK_CONSTRAINT
CK_Employee_HireDate                  HumanResources     CHECK_CONSTRAINT
CK_Employee_Gender                    HumanResources     CHECK_CONSTRAINT
CK_Employee_VacationHours             HumanResources     CHECK_CONSTRAINT
CK_Employee_SickLeaveHours            HumanResources     CHECK_CONSTRAINT

(7 row(s) affected)

name                                  schema_name        type_desc
------------------------------------- ------------------ ----------------------
FK_Employee_ID                        HumanResources     FOREIGN_KEY_CONSTRAINT
PK_Employee_ID                        HumanResources     PRIMARY_KEY_CONSTRAINT
CK_BirthDate                          HumanResources     CHECK_CONSTRAINT
CK_Employee_MaritalStatus             HumanResources     CHECK_CONSTRAINT
CK_Employee_HireDate                  HumanResources     CHECK_CONSTRAINT
CK_Employee_Gender                    HumanResources     CHECK_CONSTRAINT
CK_Employee_VacationHours             HumanResources     CHECK_CONSTRAINT
CK_Employee_SickLeaveHours            HumanResources     CHECK_CONSTRAINT

(7 row(s) affected)

F. Cambiar el nombre de las estadísticas

En el ejemplo siguiente se crea un objeto de estadísticas denominado contactMail1 y, a continuación, se cambia el nombre de la estadística a NewContact mediante sp_rename. Al cambiar el nombre de las estadísticas, el objeto debe especificarse con el formato "schema.table.statistics_name".

CREATE STATISTICS ContactMail1
    ON Person.Person (BusinessEntityID, EmailPromotion)
    WITH SAMPLE 5 PERCENT;

EXEC sp_rename 'Person.Person.ContactMail1', 'NewContact','Statistics';

Ejemplos: Azure Synapse Analytics

G. Cambio del nombre de una columna

En el ejemplo siguiente se cambia el nombre de la c1 columna de la table1 tabla a col1.

Nota:

Esta característica de Azure Synapse Analytics todavía está en versión preliminar para grupos de SQL dedicados y actualmente solo está disponible para los objetos del dbo esquema.

CREATE TABLE table1 (c1 INT, c2 INT);
EXEC sp_rename 'table1.c1', 'col1', 'COLUMN';
GO

H. Cambiar el nombre de un objeto

En el ejemplo siguiente se cambia el nombre de la tabla dbo.table1 a dbo.table2, mediante el OBJECT tipo .

EXEC sp_rename @objname = 'dbo.table1', @newname = 'table2', @objtype = 'OBJECT';