Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Renommer une clé étrangère dans SQL Server à l'aide de T-SQL

Vous pouvez utiliser le sp_rename procédure stockée système pour renommer une contrainte de clé étrangère dans SQL Server.

Le but de cette procédure stockée est de vous permettre de renommer des objets créés par l'utilisateur dans la base de données actuelle, afin que vous puissiez également renommer d'autres objets tels que des tables, des colonnes, des types de données d'alias, etc.

Syntaxe

La syntaxe de sp_rename va comme ceci :

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

Donc, votre code pourrait ressembler à ceci :

sp_rename 'schema_name.old_fk_name', 'new_fk_name';

Notez que la documentation Microsoft indique que lorsque vous renommez des contraintes (telles que des clés étrangères), vous devez qualifier le nom existant avec le nom du schéma.

Vous pouvez ou non obtenir une erreur si vous omettez le schéma, mais c'est probablement une bonne idée de suivre les conseils de Microsoft à ce sujet.

L'exemple suivant me montre renommer une clé étrangère.

Exemple 1 – Examiner toutes les clés étrangères

Tout d'abord, je vais jeter un œil aux clés étrangères dans la base de données (afin de pouvoir décider laquelle renommer).

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;

Résultat :

+--------------------------------+----------+---------+--------------------+
| 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 troisième clé étrangère ( FK__Artists__Country__4AB81AF0 ) a été nommé par le système. Le système l'a nommé parce que j'ai oublié de fournir un nom lorsque je l'ai créé.

Donnons à cette clé étrangère un nom plus concis.

Exemple 2 - Renommer la clé étrangère

Voici le bit qui renomme la clé étrangère.

sp_rename 'dbo.FK__Artists__Country__4AB81AF0', 'FK_Artists_Country';

Comme mentionné, l'ancien nom (existant) vient en premier, puis le nouveau nom.

Alors maintenant, si je sélectionne toutes les clés étrangères, j'obtiens le résultat suivant.

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;

Résultat :

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

J'ai renommé la clé étrangère avec succès.