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

Não foi possível descartar o objeto porque ele é referenciado por uma restrição FOREIGN KEY - SQL Server / TSQL Tutorial Part 74

Cenário:

Você está trabalhando como SQL Server DBA ou Desenvolvedor, você precisa remover uma tabela de um banco de dados. Quando você executa a instrução drop table SchemaName.TableName, você obtém o erro abaixo.

Msg 3726, Level 16, State 1, Line 12
Não foi possível descartar o objeto 'SchemaName.TableName' porque é referenciado por uma restrição FOREIGN KEY.

Agora sabemos que a tabela é referenciada por uma restrição de chave estrangeira. O problema é como descobrir qual tabela tem aquela Restrição de Chave Estrangeira que está fazendo referência a esta tabela.

Solução:

1) Existem muitas maneiras de obter essas informações. Podemos usar visualizações do sistema para encontrar o nome da tabela que tem a restrição de chave estrangeira que está referenciando nossa tabela primária.

SELECT Schema_Name(Schema_id) as TableSchemaName,
  object_name(FK.parent_object_id) ParentTableName,
  object_name(FK.referenced_object_id) ReferenceTableName
       FROM sys.foreign_keys AS FK
       WHERE object_name(FK.referenced_object_id)='YourTableName'
       and Schema_Name(Schema_id)='YourTableSchemaName'
 
Executei o script acima para minha tabela de clientes que está presente no esquema dbo e aqui está o que obtive.
Como descobrir qual chave estrangeira da tabela está fazendo referência à tabela no SQL Server.


Agora sabemos que Ord é a tabela que possui a Restrição de Chave Estrangeira que está referenciando nossa tabela. Podemos ir em frente e descartar a restrição de chave estrangeira e, em seguida, descartar nossa tabela.

2) Use o procedimento armazenado do sistema sp_fkeys

Podemos usar o procedimento armazenado do sistema para obter as informações das restrições de chave estrangeira que fazem referência à nossa tabela. Se o nome da minha tabela for Customer, posso executar o script abaixo
 
EXEC sp_fkeys 'Customer'
 
Como obter o nome da restrição de chave estrangeira para uma tabela no SQL Server
 O sp_fkeys retorna informações muito detalhadas, algumas das colunas não são mostradas no snapshot acima. aqui está a lista de colunas que ele retornará.


  • PKTABLE_QUALIFIER
  • PKTABLE_OWNER
  • PKTABLE_NAME
  • PKCOLUMN_NAME
  • FKTABLE_QUALIFIER
  • FKTABLE_OWNER
  • FKTABLE_NAME
  • FKCOLUMN_NAME
  • KEY_SEQ
  • UPDATE_RULE
  • DELETE_RULE
  • FK_NAME
  • PK_NAME


Demonstração de vídeo:não foi possível descartar o objeto porque ele é referenciado por uma restrição de chave estrangeira