Je souhaite trouver toutes les clés étrangères dans une table et, pour chaque clé étrangère, trouver la colonne de clé primaire & pointant vers. Je dois le faire en utilisant INFORMATION_SCHEMA parce que nous voulons utiliser ceci contre tous les fournisseurs de DB (ou du moins tout ce qui implémente correctement INFORMATION_SCHEMA).Comment trouver les clés primaires pour toutes les clés étrangères dans une base de données à l'aide de INFORMATION_SCHEMA
Le meilleur que je suis venu avec est:
"SELECT k.COLUMN_NAME, ccu.TABLE_NAME AS 'references_table', ccu.COLUMN_NAME AS 'references_field' " +
"FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS k LEFT OUTER JOIN " +
"INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS c ON k.TABLE_NAME = c.TABLE_NAME AND k.TABLE_SCHEMA = c.TABLE_SCHEMA AND " +
"k.TABLE_CATALOG = c.TABLE_CATALOG AND k.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND " +
"k.CONSTRAINT_NAME = c.CONSTRAINT_NAME LEFT OUTER JOIN " +
"INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS rc ON rc.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND " +
"rc.CONSTRAINT_CATALOG = c.CONSTRAINT_CATALOG AND rc.CONSTRAINT_NAME = c.CONSTRAINT_NAME LEFT OUTER JOIN " +
"INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS ccu ON rc.UNIQUE_CONSTRAINT_SCHEMA = ccu.CONSTRAINT_SCHEMA AND " +
"rc.UNIQUE_CONSTRAINT_CATALOG = ccu.CONSTRAINT_CATALOG AND rc.UNIQUE_CONSTRAINT_NAME = ccu.CONSTRAINT_NAME " +
"WHERE(k.CONSTRAINT_CATALOG = DB_NAME()) AND (k.TABLE_NAME = '" + table.Name + "') AND (c.CONSTRAINT_TYPE = 'FOREIGN KEY')";
Cela me semble trop compliqué. Y a-t-il un meilleur choix pour cela?
grâce - dave
Savez-vous avant-vous que chaque relation pk/fk y est exécuté dans la base de données? – EastOfJupiter
@TexasTubbs - peut-être pas. Mais nous pouvons utiliser ceux qui sont dans les métadonnées et habituellement c'est tout. –