Comment puis-je trouver toutes les dépendances de clé étrangère sur une colonne particulière?
Quelles sont les différentes alternatives (graphiquement dans SSMS, requêtes / vues dans SQL Server, outils de base de données tiers, code dans .NET)?
.net
sql-server
foreign-keys
Même Mien
la source
la source
essayer:
sp_help [table_name]
vous obtiendrez toutes les informations sur la table, y compris toutes les clés étrangères
la source
sp_fkeys [table]
sp_fkeys @fktable_name='TableName'
Si vous prévoyez de supprimer ou de renommer une table ou une colonne, la recherche uniquement des dépendances de clé étrangère peut ne pas suffire.
Référencer des tables non connectées avec une clé étrangère - Vous devrez également rechercher des tables de référence qui pourraient ne pas être connectées avec une clé étrangère (j'ai vu de nombreuses bases de données avec une mauvaise conception qui n'avaient pas de clés étrangères définies mais qui avaient des données liées ). La solution peut être de rechercher le nom de la colonne dans toutes les tables et de rechercher des colonnes similaires.
Autres objets de base de données - c'est probablement un peu hors sujet, mais si vous cherchiez toutes les références, il est également important de vérifier les objets dépendants.
Outils GUI - Essayez l'option SSMS «Rechercher des objets associés» ou des outils tels que ApexSQL Search (outil gratuit, s'intègre dans SSMS) pour identifier tous les objets dépendants, y compris les tables connectées avec une clé étrangère.
la source
Puisque votre question est orientée vers une seule table, vous pouvez utiliser ceci:
Je l'ai trouvé sur SO ici:
https://stackoverflow.com/a/12956348/652519
J'ai trouvé les informations dont j'avais besoin assez rapidement. Il répertorie la table, la colonne et le nom de la clé étrangère.
ÉDITER
Voici un lien vers la documentation qui détaille les différents paramètres pouvant être utilisés: https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-fkeys-transact-sql
la source
Je pense que ce script est moins cher:
la source
Celui que j'aime vraiment utiliser s'appelle SQL Dependency Tracker de Red Gate Software . Vous pouvez mettre dans n'importe quel objet de base de données tels que des tables, des procédures stockées, etc. et il dessinera alors automatiquement les lignes de relation entre tous les autres objets qui reposent sur les éléments sélectionnés.
Donne une très bonne représentation graphique des dépendances dans votre schéma.
la source
Merci beaucoup à John Sansom, sa requête est formidable!
De plus: vous devez ajouter "AND PT.ORDINAL_POSITION = CU.ORDINAL_POSITION" à la fin de votre requête.
Si vous avez plusieurs champs dans la clé primaire, cette instruction fera correspondre les champs correspondants les uns aux autres (j'ai eu le cas, votre requête a créé toutes les combinaisons, donc pour 2 champs dans la clé primaire, j'ai eu 4 résultats pour la clé étrangère correspondante) .
(Désolé, je ne peux pas commenter la réponse de John car je n'ai pas assez de points de réputation).
la source
Cette requête renverra des détails sur les clés étrangères dans une table, elle prend en charge plusieurs clés de colonne.
la source
Après de longues recherches, j'ai trouvé une solution de travail. Ma base de données n'utilise pas les sys.foreign_key_columns et les informations_schema.key_column_usage ne contiennent que des clés primaires.
J'utilise SQL Server 2015
SOLUTION 1 (rarement utilisée)
Si les autres solutions ne fonctionnent pas, cela fonctionnera correctement:
SOLUTION 2 (couramment utilisée)
Dans la plupart des cas, cela fonctionnera très bien:
la source
Vous pouvez utiliser INFORMATION_SCHEMA.KEY_COLUMN_USAGE et sys.foreign_key_columns afin d'obtenir les métadonnées de clé étrangère pour une table, à savoir le nom de la contrainte, la table de référence et la colonne de référence, etc.
Voici la requête:
la source
Juste une note pour la réponse @ "John Sansom",
Si les dépendances de clé étrangère sont recherchées, je pense que la clause PT Where devrait être:
et c'est la condition ON :
Comme la clé primaire de la table étrangère est couramment utilisée, je pense que ce problème n'a pas été remarqué auparavant.
la source
Cela vous donnera:
Le FK lui-même Schéma auquel appartient le FK
la source
USE information_schema;
la source