sql >> Base de Datos >  >> RDS >> Sqlserver

Cambiar el nombre de una clave principal en SQL Server (T-SQL)

En SQL Server, puede usar sp_rename procedimiento almacenado para cambiar el nombre de un objeto creado por el usuario en la base de datos actual, incluida una clave principal.

Esto puede ser útil si tiene una clave principal a la que se le asignó su nombre automáticamente y ahora desea darle un nombre más legible.

Cuando crea una clave principal sin proporcionarle explícitamente un nombre, SQL Server le delega automáticamente un nombre. Dichos nombres suelen incluir un sufijo numérico largo, lo que hace que sea más difícil de recordar. Si necesita hacer referencia a esa clave principal (por ejemplo, en su código, documentación, etc.), esos nombres pueden hacerle la vida más difícil. Afortunadamente, sp_rename proporciona una manera rápida y fácil de cambiar este nombre.

Sintaxis

La sintaxis de sp_rename va así:

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

Para claves primarias (y otras restricciones), el tipo de objeto es OBJECT .

Ejemplo

Primero, obtengamos el nombre de la clave principal que queremos cambiar:

SELECT 
    SCHEMA_NAME(schema_id) AS SchemaName, 
    name AS PrimaryKey
FROM sys.objects  
WHERE parent_object_id = (OBJECT_ID('dbo.t1'))   
AND type = 'PK';

Resultado:

 +--------------+--------------------------+
 | SchemaName   | PrimaryKey               |
 |--------------+--------------------------|
 | dbo          | PK__t1__3213663B10938530 |
 +--------------+--------------------------+ 

Esta es la clave principal para la tabla llamada t1 , Así que seguiremos adelante y cambiaremos el nombre de esa clave principal.

Cuando cambia el nombre de una clave principal, debe incluir el esquema con el nombre actual.

Ejemplo:

EXEC sp_rename 'dbo.PK__t1__3213663B10938530', 'PK_t1';

Cuando cambie el nombre de una clave principal (o cualquier otro objeto) en SQL Server, probablemente verá el siguiente mensaje:

Caution: Changing any part of an object name could break scripts and stored procedures.

Básicamente, esto nos advierte que cualquier secuencia de comandos y/o procedimientos almacenados que hagan referencia al objeto ahora podrían fallar y deben actualizarse en consecuencia para reflejar el nuevo nombre.

Independientemente, ahora se ha cambiado el nombre de la clave principal.

Podemos verificar esto ejecutando la consulta anterior nuevamente:

SELECT 
    SCHEMA_NAME(schema_id) AS SchemaName, 
    name AS PrimaryKey
FROM sys.objects  
WHERE parent_object_id = (OBJECT_ID('dbo.t1'))   
AND type = 'PK';

Resultado:

 +--------------+--------------+
 | SchemaName   | PrimaryKey   |
 |--------------+--------------|
 | dbo          | PK_t1        |
 +--------------+--------------+ 

Incluyendo el tipo de objeto

También puede incluir el tipo de objeto como tercer argumento. Para claves primarias y otras restricciones, use OBJECT :

EXEC sp_rename 'dbo.PK__t1__3213663B10938530', 'PK_t1', 'OBJECT';

Incluir los nombres de los parámetros

Al igual que con cualquier procedimiento almacenado, también puede incluir los nombres de los parámetros al llamar a sp_rename :

EXEC sp_rename 
    @objname = 'dbo.PK__t1__3213663B10938530',
    @newname = 'PK_t1',
    @objtype = 'OBJECT';

Esto hace exactamente lo mismo (cambia el nombre de la clave principal especificada).