Você pode usar o
sp_rename
procedimento armazenado do sistema para renomear uma restrição de chave estrangeira no SQL Server. O objetivo deste procedimento armazenado é permitir que você renomeie objetos criados pelo usuário no banco de dados atual, para que você também possa renomear outros objetos, como tabelas, colunas, tipos de dados de alias etc.
Sintaxe
A sintaxe de
sp_rename
fica assim:sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ]
Então seu código poderia ficar assim:
sp_rename 'schema_name.old_fk_name', 'new_fk_name';
Observe que a documentação da Microsoft afirma que, ao renomear restrições (como chaves estrangeiras), você deve qualificar o nome existente com o nome do esquema.
Você pode ou não receber um erro se omitir o esquema, mas provavelmente é uma boa ideia seguir o conselho da Microsoft neste.
O exemplo a seguir me mostra renomeando uma chave estrangeira.
Exemplo 1 – Revisar todas as chaves estrangeiras
Primeiro, darei uma olhada nas chaves estrangeiras no banco de dados (para que eu possa decidir qual renomear).
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 | +--------------------------------+----------+---------+--------------------+
A terceira chave estrangeira ( FK__Artists__Country__4AB81AF0 ) foi nomeado pelo sistema. O sistema o nomeou porque esqueci de fornecer um nome quando o criei.
Vamos dar a esta chave estrangeira um nome mais conciso.
Exemplo 2 – Renomeie a chave estrangeira
Aqui está o bit que renomeia a chave estrangeira.
sp_rename 'dbo.FK__Artists__Country__4AB81AF0', 'FK_Artists_Country';
Como mencionado, o nome antigo (existente) vem primeiro, depois o novo nome.
Então, agora, se eu selecionar todas as chaves estrangeiras, recebo o seguinte 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 | +--------------------+----------+---------+--------------------+
Eu renomeei com sucesso a chave estrangeira.