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.