Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Rinominare una chiave esterna in SQL Server utilizzando T-SQL

Puoi usare sp_rename stored procedure di sistema per rinominare un vincolo di chiave esterna in SQL Server.

Lo scopo di questa procedura memorizzata è di consentire di rinominare gli oggetti creati dall'utente nel database corrente, in modo da poter rinominare anche altri oggetti come tabelle, colonne, tipi di dati alias, ecc.

Sintassi

La sintassi di sp_rename va così:

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

Quindi il tuo codice potrebbe essere qualcosa del genere:

sp_rename 'schema_name.old_fk_name', 'new_fk_name';

Si noti che la documentazione Microsoft afferma che quando si rinominano i vincoli (come le chiavi esterne) è necessario qualificare il nome esistente con il nome dello schema.

Potresti ricevere o meno un errore se ometti lo schema, ma probabilmente è una buona idea seguire i consigli di Microsoft su questo.

L'esempio seguente mi mostra come rinominare una chiave esterna.

Esempio 1:rivedere tutte le chiavi esterne

Per prima cosa, darò un'occhiata alle chiavi esterne nel database (così posso decidere quale rinominare).

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;

Risultato:

+--------------------------------+----------+---------+--------------------+
| 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 terza chiave esterna ( FK__Artists__Country__4AB81AF0 ) è stato nominato dal sistema. Il sistema lo ha chiamato perché ho dimenticato di fornire un nome quando l'ho creato.

Diamo a questa chiave esterna un nome più conciso.

Esempio 2:rinominare la chiave esterna

Ecco il bit che rinomina la chiave esterna.

sp_rename 'dbo.FK__Artists__Country__4AB81AF0', 'FK_Artists_Country';

Come accennato, viene prima il vecchio nome (esistente), poi il nuovo nome.

Quindi ora se seleziono tutte le chiavi esterne, ottengo il seguente risultato.

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;

Risultato:

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

Ho rinominato con successo la chiave esterna.