Estou tentando derrubar uma mesa, mas recebo a seguinte mensagem:
Msg 3726, nível 16, estado 1, linha 3
Não foi possível descartar o objeto 'dbo.UserProfile' porque ele é referenciado por uma restrição FOREIGN KEY.
Msg 2714, nível 16, estado 6, linha 2
Já existe um objeto denominado 'UserProfile' no banco de dados.
Procurei no SQL Server Management Studio, mas não consigo encontrar a restrição. Como posso descobrir as restrições de chave estrangeira?
sql
sql-server
sql-server-2008
marc_s
fonte
fonte
Worth noticing:
A resposta de @LittleSweetSeas retornará informações sobre as chaves estrangeiras PARA uma determinada tabela referenciada , no entanto, os detalhes da resposta de @Gayathri-Varma para uma determinada tabela pai . Ambos são úteis em contextos diferentes e ambos ganham sua própria corrida :-)Respostas:
Aqui está:
Dessa forma, você obterá a tabela de referência e o nome da coluna.
Editado para usar sys.tables em vez de sys.objects genéricos de acordo com a sugestão de comentário. Obrigado, marc_s
fonte
sys.tables
vez desys.objects
INNER JOIN sys.objects AS o ON o.OBJECT_ID = fc.referenced_object_id
porINNER JOIN sys.tables t ON t.OBJECT_ID = fc.referenced_object_id
Outra maneira é verificar os resultados de
(ou apenas destaque o TableName citado e pressione ALT + F1)
Com o passar do tempo, decidi refinar minha resposta. Abaixo está uma captura de tela dos resultados que
sp_help
fornece. A usei o banco de dados AdventureWorksDW2012 para este exemplo. Existem inúmeras informações boas lá, e o que estamos procurando está no final - destacado em verde:fonte
Tente isto
fonte
name
valor retornado é um nome interno (methinks), e não o nome da coluna real na tabela pai. Algum jeito de arrumar isso?ParentTableName
seria sempre o mesmo que o 'Tablename
' fornecido na cláusula where (se incluído). Isso pode ser intencional e será mais útil quando consultado por mais de uma tabela.Achei essa resposta muito simples e fiz o que eu precisava: https://stackoverflow.com/a/12956348/652519
Um resumo do link, use esta consulta:
Rápido e simples. Consegui localizar todas as tabelas de chave estrangeira, respectivas colunas e nomes de chave estrangeira de 15 tabelas muito rapidamente.
Como @mdisibio observado abaixo, 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
EXEC sp_fkeys 'Payroll', 'accounting'
Estou usando este script para encontrar todos os detalhes relacionados à chave estrangeira. Estou usando o INFORMATION.SCHEMA. Abaixo está um script SQL:
fonte
se você quiser ir via SSMS na janela do explorador de objetos, clique com o botão direito do mouse no objeto que deseja soltar e visualize as dependências.
fonte
Esta é a melhor maneira de descobrir o relacionamento de chave estrangeira em todos os bancos de dados.
e mais uma forma
fonte
exec sp_helpconstraint 'Table Name'
é a única que retorna alguma linha para mim. No entanto, o nome da restrição é jargão.PRIMARY KEY (clustered) PK__org_soft__3213E83FE6B07364
fonte
--O que se segue pode dar-lhe mais do que procura:
fonte
Você também pode retornar todas as informações sobre
Foreign Keys
adaptando a resposta @LittleSweetSeas:fonte
No SQL Server Management Studio, você pode clicar com o botão direito do mouse na tabela no explorador de objetos e selecionar "Exibir dependências". Isso lhe daria um bom ponto de partida. Ele mostra tabelas, visualizações e procedimentos que fazem referência à tabela.
fonte
tente a seguinte consulta.
isso dará o constraint_name, column_names que estará se referindo e as tabelas que dependerão da restrição estarão lá.
fonte
Você pode usar esta consulta para exibir as
Foreign key
restrições:Retirado de http://blog.sqlauthority.com/2006/11/01/sql-server-query-to-display-foreign-key-relationships-and-name-of-the-constraint-for-each-table- no banco de dados /
fonte
A maneira mais fácil de obter
Primary Key
e obterForeign Key
uma mesa é:fonte
No Object Explorer, expanda a tabela e expanda as Chaves:
fonte