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

Cambiar el nombre de una clave externa en SQL Server usando T-SQL

Puede usar el sp_rename procedimiento almacenado del sistema para cambiar el nombre de una restricción de clave externa en SQL Server.

El propósito de este procedimiento almacenado es permitirle cambiar el nombre de los objetos creados por el usuario en la base de datos actual, por lo que también puede cambiar el nombre de otros objetos como tablas, columnas, tipos de datos de alias, etc.

Sintaxis

La sintaxis de sp_rename va así:

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

Entonces su código podría ser algo como esto:

sp_rename 'schema_name.old_fk_name', 'new_fk_name';

Tenga en cuenta que la documentación de Microsoft establece que al cambiar el nombre de las restricciones (como las claves externas), debe calificar el nombre existente con el nombre del esquema.

Puede o no obtener un error si omite el esquema, pero probablemente sea una buena idea seguir los consejos de Microsoft al respecto.

El siguiente ejemplo me muestra cómo cambiar el nombre de una clave externa.

Ejemplo 1:revisar todas las claves foráneas

Primero, echaré un vistazo a las claves foráneas en la base de datos (para poder decidir a cuál renombrar).

SELECT
  name AS 'Foreign Key',
  SCHEMA_NAME(schema_id) AS 'Schema',
  OBJECT_NAME(parent_object_id) AS 'Table',
  OBJECT_NAME(referenced_object_id) AS 'Referenced Table'
FROM sys.foreign_keys;

Resultado:

+--------------------------------+----------+---------+--------------------+
| Foreign Key                    | Schema   | Table   | Referenced Table   |
|--------------------------------+----------+---------+--------------------|
| FK_Albums_Artists              | dbo      | Albums  | Artists            |
| FK_Albums_Genres               | dbo      | Albums  | Genres             |
| FK__Artists__Country__4AB81AF0 | dbo      | Artists | Country            |
+--------------------------------+----------+---------+--------------------+

La tercera clave foránea ( FK__Artists__Country__4AB81AF0 ) ha sido nombrado por el sistema. El sistema lo nombró porque olvidé proporcionar un nombre cuando lo creé.

Démosle a esta clave externa un nombre más conciso.

Ejemplo 2:cambiar el nombre de la clave externa

Aquí está el bit que cambia el nombre de la clave externa.

sp_rename 'dbo.FK__Artists__Country__4AB81AF0', 'FK_Artists_Country';

Como se mencionó, el nombre antiguo (existente) viene primero, luego el nuevo nombre.

Ahora, si selecciono todas las claves foráneas, obtengo el siguiente resultado.

SELECT
  name AS 'Foreign Key',
  SCHEMA_NAME(schema_id) AS 'Schema',
  OBJECT_NAME(parent_object_id) AS 'Table',
  OBJECT_NAME(referenced_object_id) AS 'Referenced Table'
FROM sys.foreign_keys;

Resultado:

+--------------------+----------+---------+--------------------+
| Foreign Key        | Schema   | Table   | Referenced Table   |
|--------------------+----------+---------+--------------------|
| FK_Albums_Artists  | dbo      | Albums  | Artists            |
| FK_Albums_Genres   | dbo      | Albums  | Genres             |
| FK_Artists_Country | dbo      | Artists | Country            |
+--------------------+----------+---------+--------------------+

He cambiado con éxito el nombre de la clave externa.