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

edge_man Messages postés 4 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 7 août 2008 - 7 août 2008 à 10:35
SQLpro Messages postés 35 Date d'inscription samedi 17 novembre 2007 Statut Membre Dernière intervention 8 février 2012 - 21 août 2008 à 15:55
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.

1 réponse

SQLpro Messages postés 35 Date d'inscription samedi 17 novembre 2007 Statut Membre Dernière intervention 8 février 2012 1
21 août 2008 à 15:55
Tout d'abord le terme "relation" est toptalement inaproprié. Il n'y a pas de relations entre les tables, les relation étant un objet mathématique proche de la notion de table. En revanche il existe des tables liées par des mécanismes d'intégrité référentielles dits "déclaratif" lorsque ce sont des contraintes de clefs étrangères. Lorsque l'on utilse des déclencheurs, alors on parle d'intégrité référentielle fonctionnelle.

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?

Non compte tenu de la complexité possible du code. Et c'est d'ailleurs assez mauvais que de gérer ses intégrités référentielles sous forme de déclencheur, sachant que le déclencheur rest l'outil qui est le plux couteux en terme de ressources de traitement de tous niveaux puisqu'il participe à la transaction.

A +

Frédéric BROUARD - SQLpro - MVP SQL Server
Spécialiste SQL, SGBDR, modéles de données
SQL & SGBDR  http://sqlpro.developpez.com/
Expert SQL Server : http://www.sqlspot.com
audits - optimisation - tuning - formatio
0
Rejoignez-nous