Como posso encontrar todas as dependências de chave estrangeira em uma coluna específica?
Quais são as diferentes alternativas (graficamente no SSMS, consultas / visualizações no SQL Server, ferramentas de banco de dados de terceiros, código no .NET)?
.net
sql-server
foreign-keys
Even Mien
fonte
fonte
experimentar:
sp_help [table_name]
você obterá todas as informações sobre a tabela, incluindo todas as chaves estrangeiras
fonte
sp_fkeys [table]
sp_fkeys @fktable_name='TableName'
Se você planeja excluir ou renomear uma tabela ou coluna, localizando apenas dependências de chave estrangeira pode não ser suficiente.
Tabelas de referência não conectadas à chave estrangeira - Você também precisará procurar tabelas de referência que podem não estar conectadas à chave estrangeira (eu já vi muitos bancos de dados com design incorreto que não tinham chaves estrangeiras definidas, mas que tinham dados relacionados ) A solução pode ser procurar o nome da coluna em todas as tabelas e procurar colunas semelhantes.
Outros objetos de banco de dados - este provavelmente é um tópico pouco interessante, mas se você estava procurando todas as referências, também é importante verificar se há objetos dependentes.
Ferramentas da GUI - Experimente a opção “Encontrar objetos relacionados” do SSMS ou ferramentas como ApexSQL Search (ferramenta gratuita, integra-se ao SSMS) para identificar todos os objetos dependentes, incluindo tabelas conectadas com chave estrangeira.
fonte
Como sua pergunta é voltada para uma única tabela, você pode usar o seguinte:
Encontrei no SO aqui:
https://stackoverflow.com/a/12956348/652519
Encontrei as informações necessárias rapidamente. Ele lista a tabela, a coluna e o nome da chave estrangeira.
EDITAR
Aqui está um link para a documentação que detalha os diferentes parâmetros que podem ser usados: https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-fkeys-transact-sql
fonte
Eu acho que esse script é mais barato:
fonte
Um que eu realmente gosto de usar é chamado SQL Dependency Tracker da Red Gate Software . Você pode colocar qualquer objeto (s) de banco de dados, como tabelas, procedimentos armazenados, etc., e ele desenhará automaticamente as linhas de relacionamento entre todos os outros objetos que dependem dos itens selecionados.
Dá uma representação gráfica muito boa das dependências no seu esquema.
fonte
Muito obrigado a John Sansom, sua pergunta é fantástica!
Além disso: você deve adicionar "AND PT.ORDINAL_POSITION = CU.ORDINAL_POSITION" no final da sua consulta.
Se você tiver vários campos na chave primária, essa instrução corresponderá aos campos correspondentes (eu tive o caso, sua consulta criou todas as combinações; portanto, para 2 campos na chave primária, obtive 4 resultados para a chave estrangeira correspondente) .
(Desculpe, não posso comentar a resposta de John, pois não tenho pontos de reputação suficientes).
fonte
Esta consulta retornará detalhes sobre chaves estrangeiras em uma tabela, suporta várias chaves de coluna.
fonte
Após uma longa pesquisa, encontrei uma solução funcional. Meu banco de dados não usa os sys.foreign_key_columns e o information_schema.key_column_usage contém apenas chaves primárias.
Eu uso o SQL Server 2015
SOLUÇÃO 1 (raramente usada)
Se outras soluções não funcionarem, isso funcionará bem:
SOLUÇÃO 2 (comumente usada)
Na maioria dos casos, isso funcionará perfeitamente:
fonte
Você pode usar o arquivo INFORMATION_SCHEMA.KEY_COLUMN_USAGE e sys.foreign_key_columns para obter os metadados da chave estrangeira de uma tabela, como nome da restrição, tabela de referência e coluna de referência, etc.
Abaixo está a consulta:
fonte
Apenas uma nota para a resposta "John Sansom",
Se as dependências de chave estrangeira forem procuradas, acho que a cláusula PT Where deve ser:
e é a condição ON :
Como normalmente é usada a chave primária da tabela estrangeira, acho que esse problema não foi percebido antes.
fonte
Isso lhe dará:
O próprio FK Esquema ao qual o FK pertence
fonte
USE information_schema;
fonte