IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Liste des tables dont dépend une autre


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif Avatar de katoyi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Par défaut Liste des tables dont dépend une autre
    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.

  2. #2
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Sauf erreur de ma part, il suffit de faire un right-clic sur le nom de la table et de choisir "View dependencies"

  3. #3
    Invité
    Invité(e)
    Par défaut
    Et plus globalement : ici

  4. #4
    Membre éclairé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Par défaut
    sélectionner le nom de l'objet et faire alt+F1 donne un paquet d'informations aussi.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Par défaut
    Dans une requête et en utilisant les tables d'information, tu peux faire ça comme ça :

    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'
    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..

    A+

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 001
    Billets dans le blog
    6
    Par défaut
    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 :

    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'
    A +
    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/ * * * * *

  7. #7
    Membre actif Avatar de katoyi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Par défaut
    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
    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)
    Encore merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Liste des tables existantes dans une base de données
    Par Lorenzole+bo dans le forum VBA Access
    Réponses: 1
    Dernier message: 13/11/2007, 20h15
  2. [OUTIL] Liste des OCX dont dépend un programme VB
    Par kisame dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 18/01/2007, 14h40
  3. [Vue] Trouver les tables dont dépend une vue
    Par maitrebn dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/08/2006, 08h51
  4. Réponses: 8
    Dernier message: 17/06/2006, 15h13
  5. Réponses: 2
    Dernier message: 08/03/2006, 22h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo