853 votes

Comment est-ce que je peux énumérer toutes les clés étrangères faisant référence à une table dans SQL Server ?

J’ai besoin de supprimer une table très référencée dans une base de données SQL Server. Comment puis-je obtenir une liste de toutes les contraintes de clé étrangère que je vais devoir supprimer afin de supprimer la table ?

(Préférable au cours en cliquant sur dans l’interface graphique de management studio SQL réponses.)

Merci d’avance.

1283voto

Recep Points 2996

Ne sais pas pourquoi personne n’a suggéré, mais j’ai utiliser sp_fkeys pour interroger les clés étrangères pour une table donnée :

248voto

Gishu Points 59012

Je voudrais utiliser la fonctionnalité de création de diagrammes de base de données dans SQL Server Management studio... mais puisque vous qui exclu...

Cela a fonctionné pour moi dans SQL2008 (n’ai 2005)

Pour obtenir la liste de référence des tables et des colonnes de noms...

Pour obtenir les noms des contraintes de clé étrangère

237voto

Gustavo Rubio Points 2370

Cela vous donne:

  • Le FK lui-même lui-même
  • Schéma de la FK appartient à
  • La "table de référence" ou de la table qui a le FK
  • Le "référencement colonne" ou de la colonne à l'intérieur table de référence qui pointe vers le FK
  • La "table référencée" ou de la table contenant la colonne de clé que votre FK vers
  • La "colonne référencée" ou la colonne qui est la clé de votre FK vers

Le Code ci-dessous:

SELECT  obj.name AS FK_NAME,
    sch.name AS [schema_name],
    tab1.name AS [table],
    col1.name AS [column],
    tab2.name AS [referenced_table],
    col2.name AS [referenced_column]
FROM sys.foreign_key_columns fkc
INNER JOIN sys.objects obj
    ON obj.object_id = fkc.constraint_object_id
INNER JOIN sys.tables tab1
    ON tab1.object_id = fkc.parent_object_id
INNER JOIN sys.schemas sch
    ON tab1.schema_id = sch.schema_id
INNER JOIN sys.columns col1
    ON col1.column_id = parent_column_id AND col1.object_id = tab1.object_id
INNER JOIN sys.tables tab2
    ON tab2.object_id = fkc.referenced_object_id
INNER JOIN sys.columns col2
    ON col2.column_id = referenced_column_id AND col2.object_id = tab2.object_id

168voto

BankZ Points 745

Essayez ceci :

50voto

Mspaja Points 136

Vous devriez également à l'esprit les références à d'autres objets.

Si la table a été très référencé par d'autres tables que c'est probablement aussi très référencée par d'autres objets tels que des vues, procédures stockées, fonctions et plus encore.

J'aimerais vraiment recommander outil graphique comme "afficher les dépendances de dialogue" dans SSMS ou outil gratuit comme ApexSQL de Recherche pour ce parce que la recherche de dépendances à d'autres objets peuvent être des erreurs si vous voulez le faire uniquement avec SQL.

Si SQL est la seule option que vous pourriez essayer de le faire comme ça.

select O.name as [Object_Name], C.text as [Object_Definition]
from sys.syscomments C
inner join sys.all_objects O ON C.id = O.object_id
where C.text like '%table_name%'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X