Compartir a través de


sp_rename (Transact-SQL)

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 un tipo definido por el usuario CLR (Common Language Runtime) de Microsoft .NET Framework.

Advertencia

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

Se aplica a: SQL Server (SQL Server 2008 a versión actual), Windows Azure SQL Database (Versión inicial a versión actual).

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

  • [ @objname = ] 'object_name'
    Es el nombre actual completo o incompleto del objeto de usuario o tipo de datos. Si el objeto cuyo nombre se va a cambiar es una columna de una tabla, object_name debe tener el formato table.column o schema.table.column. Si el objeto cuyo nombre se va a cambiar es un índice, object_name debe tener el formato table.index o schema.table.index. Si el objeto cuyo nombre se va a cambiar es una restricción, object_name debe tener 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 de tipo nvarchar(776) y no tiene ningún valor predeterminado.

  • [ @newname = ] 'new_name'
    Es el nuevo nombre del objeto especificado. new_name debe ser un nombre de una parte y debe cumplir las reglas de los identificadores. newname es de tipo sysname y no tiene ningún valor predeterminado.

    Nota

    Los nombres de los desencadenadores no pueden comenzar por # o ##.

  • [ @objtype = ] 'object_type'
    Es el tipo de objeto cuyo nombre se va a cambiar. object_type es de tipo varchar(13), su valor predeterminado es NULL y puede tener 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

    Elemento de un tipo registrado 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

    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.

    Se aplica a: SQL Server 2012 a SQL Server 2014 y Windows Azure SQL Database.

    USERDATATYPE

    Se han agregado los tipos definidos por el usuario de CLR mediante la ejecución de CREATE TYPE o sp_addtype.

Valores de código de retorno

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

Comentarios

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

sp_rename cambia automáticamente el nombre del índice asociado cuando se cambia el nombre de una restricción PRIMARY KEY o UNIQUE. Si un índice cuyo nombre se ha cambiado está enlazado a una restricción PRIMARY KEY, sp_rename también cambia automáticamente el nombre de esta restricción.

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

Al cambiar el nombre de un procedimiento almacenado, una función, una vista o un desencadenador, no se cambiará el nombre del objeto correspondiente en la columna definition de la vista de catálogo sys.sql_modules. Por lo tanto, se recomienda no utilizar sp_rename para cambiar el nombre a estos tipos de objetos. En su lugar, quite el objeto y vuelva a crearlo con su nuevo nombre.

Al cambiar el nombre de un objeto como una tabla o columna, no se cambia 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. Utilicesys.sql_expression_dependencies para ver las dependencias del objeto antes de cambiarle el nombre.

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, debe pertenecer a los roles fijos de servidor sysadmin o dbcreator

Ejemplos

A.Cambiar el nombre de una tabla

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

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

B.Cambiar el nombre de una columna

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

USE AdventureWorks2012;
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 AdventureWorks2012;
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 AdventureWorks2012;
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 AdventureWorks2012; 
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.
sp_rename 'HumanResources.PK_Employee_BusinessEntityID', 'PK_EmployeeID';
GO

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

-- Rename a foreign key constraint.
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'); 

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 siguiente ejemplo se crea un objeto de estadísticas denominado contactMail1 y, a continuación, se usa sp_rename para cambiar el nombre de la estadística a NewContact. Al cambiar el nombre de las estadísticas, el objeto se debe especificar con el formato schema.table.statistics_name.

Se aplica a: SQL Server (SQL Server 2012 a SQL Server 2014, Windows Azure SQL Database).

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

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

Vea también

Referencia

sys.sql_expression_dependencies (Transact-SQL)

sys.sql_modules (Transact-SQL)

Procedimientos almacenados del sistema (Transact-SQL)

Procedimientos almacenados del motor de base de datos (Transact-SQL)