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

Développement SQL Server Discussion :

problème récupération de la liste des relations entre deux tables


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut problème récupération de la liste des relations entre deux tables
    Bonjour,

    dans une application que je suis entrain de développer, j'ai besoin de récupérer la liste des relations entre les tables d'une base de données sql server.
    Pour ce faire, j'utilise les classes 'Table', 'TableCollection' et les champs 'ForeignKeys'(classe 'Table'), 'referencedTable'(classe 'Table') et 'fkColumn' (classe 'ForeignKeyColumn').

    (Tout ces éléments étant présent dans la librairie 'Microsoft.SqlServer.Management.Smo').

    Pour cela pas de problèmes, je récupère toutes les relations correctement. Le problème, vient en fait que certaines relations dans ma base de données sont traitées par des Triggers. Et là ça se corse sérieusement. Il y a bien sur le champs 'Triggers' (classe 'Table'), mais dans les propriétés de celui-ci, je ne peux récupérer que le nom. Or je voudrais pouvoir faire comme précédement, et donc récupérer, la table sur lequel agit le trigger. Mais à ma connaissance, cet info n'est stockée que dans le texte du trigger (le champs 'textBody' je crois), et n'est donc pas exploitable.

    Ma question est donc, y a-t-il un moyen de récupérer le nom de la table sur lequel agit un trigger d'une autre façon?

    J'utilise sql server 2005, visual studio 2008, en C# avec le framework . NET 3.5.

    Merci d'avance.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    une idée comme ça... as tu essayé les tables systèmes de ta base ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    oui, j'ai fait des recherches dans ce sens, mais j'en arrive à la même conclusion. C'est stocké dans le texte du trigger. Il n'y a pas de champs qui spécifie seulement la table sur lequel agit le trigger.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    Si tu utilises sysdepends tu peux obtenir les dépendances.
    ainsi si tu cherches sur quel objet agit sur quel table tu trouvera ton bonheur.
    Les colonnes sont id (objet : TRIGGER dans ton cas) et depid (objet utilisé)

    ainsi si tu cherches quels sont les objets qui utilise tableA tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT object_name(id) FROM sysdepends WHERE object_id('TableA') = depid
    tu peux également ajouter une clause sur les colonnes resultobj et readobj qui te permette de détermminer si l'objet met à jour la table ou lit.

    J'espère que ca pourra t'aider

    attention: cette table ne prend pas en compte le sql dynamique

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    merci cannibal,

    En fait je ne connaissais pas cette table 'sysdepends'.

    Donc j'explique comment je m'en suis sorti :

    Pour une table 'tabA' qui a des triggers qui agissent sur une table 'tabB'

    1- Récupérer la liste des triggers de la table 'tabA' (par Exemple):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT name
    FROM sys.triggers
    WHERE is_ms_shipped = 0
    AND object_name(parent_id) = 'tabA'
    2- Pour chaque trigger trouvé, faire une recherche dans la table 'sysdepends' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT object_name(depid) 
    FROM sysdepends 
    WHERE object_id('nom_du_trigger') = id
    Bon, par contre avec cette méthode, on est obligé de passer par du code (C# dans mon cas). Moi ça me va, mais il y a peut être moyen d'améliorer le fonctionnement.

    Encore merci

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Salut edge_man,

    Dans mon appli, j'ai aussi besoin de récupérer la liste des relations entre les tables d'une base de données sql server mais sans trigger de mon côté.

    J'ai fait des recherches par rapport aux classes que tu évoques mais je galère ...

    Pourrais-tu me dire comment tu as fait ?

    Merci

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

Discussions similaires

  1. [vb6 access]liste des relation entre les tables
    Par bailamos dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 26/02/2009, 16h16
  2. Liste des relations entre tables
    Par AndréPe dans le forum IHM
    Réponses: 9
    Dernier message: 01/12/2007, 16h41
  3. [DEBUTANT]Problème de relation entre deux tables
    Par Yomane dans le forum Schéma
    Réponses: 2
    Dernier message: 20/10/2006, 01h30
  4. Générer le listing des jours entre deux dates
    Par gsmdu62 dans le forum Langage
    Réponses: 8
    Dernier message: 01/05/2006, 11h08
  5. Problème de relation entre deux tables + autre chose
    Par Goth_sensei dans le forum Langage SQL
    Réponses: 7
    Dernier message: 30/03/2006, 20h49

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