Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Renomear uma chave estrangeira no SQL Server usando T-SQL


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.