Bonjour,
J'utilise SQL Server 2005 et j'ai besoin de savoir pour une table donnée la liste des autres tables dont elle dépend, c'est à dire les tables dans lesquelles elle va chercher ses foreigns keys.
Merci d'avance.
Bonjour,
J'utilise SQL Server 2005 et j'ai besoin de savoir pour une table donnée la liste des autres tables dont elle dépend, c'est à dire les tables dans lesquelles elle va chercher ses foreigns keys.
Merci d'avance.
Sauf erreur de ma part, il suffit de faire un right-clic sur le nom de la table et de choisir "View dependencies"
Et plus globalement : ici
sélectionner le nom de l'objet et faire alt+F1 donne un paquet d'informations aussi.
Dans une requête et en utilisant les tables d'information, tu peux faire ça comme ça :
Tu transformes ça en procédure stockée avec un paramètre qui correspond au nom de ta table, et ça marchera dans n'importe quelle db..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT KCU.COLUMN_NAME,KCU.TABLE_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE CTU INNER JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC ON CTU.CONSTRAINT_NAME = RC.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU ON RC.UNIQUE_CONSTRAINT_NAME = KCU.CONSTRAINT_NAME where CTU.TABLE_NAME = 'NOM_DE_TA_TABLE'
A+
Votre requête est fausse. En effet un nom de contrainte est unique AU SEIN DU SCHEMA. Ce qui veut dire que dans la même base, deux contraintes pevent porter le même nom si elles ne sont pas dans le même schéma.
Il faut donc faire les jointures en y incluant le SCHEMA de la contrainte :
D'autre part rechercher les tables liées à d'autres tables nécessite d'interroger la vue INFORMATION_SCHEMA.TABLE_CONSTRAINTS :
A +
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 SELECT CTU.TABLE_SCHEMA + '.' + CTU.TABLE_NAME AS TABLE_ORIGINE, RC.CONSTRAINT_NAME AS CONTRAINTE_IR, TC.TABLE_SCHEMA + '.' + TC.TABLE_NAME AS REFERENCE FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE CTU INNER JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC ON CTU.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA AND CTU.CONSTRAINT_NAME = RC.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC ON RC.UNIQUE_CONSTRAINT_SCHEMA = TC.CONSTRAINT_SCHEMA AND RC.UNIQUE_CONSTRAINT_NAME = TC.CONSTRAINT_NAME WHERE CTU.TABLE_NAME = 'NOM_DE_TA_TABLE' AND CTU.TABLE_SCHEMA = 'NOM_SCHEM_TABLE'
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Merci les gars,
Ca marche. J'ai même perfectionner en affichant la table mère, les colonnes de la table mère et celles de la table fille mises en jeu
Encore merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT object_name(rkeyid) MT ,sc2.name MS ,object_name(fkeyid) CT ,sc1.name Child_Cols FROM sysforeignkeys sf INNER JOIN syscolumns sc1 ON sf.fkeyid = sc1.id AND sf.fkey = sc1.colid INNER JOIN syscolumns sc2 ON sf.rkeyid = sc2.id AND sf.rkey = sc2.colid WHERE object_name(fkeyid) = 'nomtable' order by object_name(rkeyid)
Partager