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 :

References utilisées dans une sql procedure


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut References utilisées dans une sql procedure
    Bonjour,

    Je souhaitera avoir un outil qui me donne toutes les références utilisées par une SQL Procédure en Transact-SQL.
    Par références j'entends le nom des tables et colonnes qui sont utilisées dans le SQL proc.

    P.S: un truc mieux que Visual Expert ;-)

    Merci

  2. #2
    Membre régulier
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut
    Personne pour me donner un coup de main sur ce problème?

    Idéalement je recherche une API (peu importe le language) qui prenne en input une procedure SQL sous forme de fichier (Sybase Transact-SQL) et qui ressorte en output toutes les tables/colonnes qui sont référencées dans cette proc.
    Je veux pouvoir lancer çà en batch.


  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Sous Management Studio vous pouvez faire un clic-droit sur un module SQL pour obtenir la liste des tables et des autres modules dont il est dépendant, mais vous n'avez pas les colonnes.
    Vous pouvez requêter sys.sql_denpendencies pour obtenir ces dépendances, mais là encore vous n'aurez pas les colonnes.
    Vous pouvez croiser cela avec sys.sql_modules, sys.parameters et sys.columns pour obtenir respectivement le code complet des modules, leurs paramètres, et la liste des colonnes des tables ...
    Le "mieux" serait de dépouiller le code de vos modules avec des expressions régulières, mais là, bon courage

    @++

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    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 : 21 999
    Billets dans le blog
    6
    Par défaut
    ATTENTION : le contenu de ces tables n'est pas toujours cohérent. En effet vous avez le droit de créer une procédure qui appelle une autre procédure qui n'a pas encore été créé ! D'où un manque dans les données renvoyées par une telle requête...

    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/ * * * * *

  5. #5
    Membre régulier
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut
    Personne pour m'aider sur ce sujet ?
    C'est pas trop urgent, c'est juste que je vais perdre mon job si je trouve pas une solution (blague )

  6. #6
    Membre averti
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Par défaut
    Salut,

    à ma connaissance ce genre d'outils n'existe pas, en tout cas pas dans le sens de l'analyse que tu souhaites effectuer. Les seuls outils qui fassent à peu près cela sont les profiler qui tracent les graphes de dépendance des objets en cours d'exécution.

    Cette procédure fait-elle 2000 lignes qui appellent des dizaines d'autres procédures ? Dans ce cas, ...

    Sinon: c'est quoi le but de cette analyse ? Si c'est de ne pas comprendre ce que fait la procédure et de simplement lister les dépendances alors ... fait un programme qui recherche toutes les clauses From (avant on trouve les colonnes, après on trouve le nom des tables et des vues utilisées) et tous les mots commencant par 'sp_' (on trouve les procédures stockées). Et pour chaque table il te faut lister les dépendances de cette table (Foreign Key) et pour chaque procédure trouvée à nouveau la même analyse. On peut faire cela à la mano avec de l'entrainement !

    Si tu perds ton emploi à cause d'une procédure stockée, il ne te restera plus qu'à devenir développeur Smalltalk, ce qui est une cause noble en soi

  7. #7
    Membre régulier
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut
    Le but est d'effectuer une analyse d'impact basé sur des changements de database structure et sur des changements de valeurs possible pour les champ.

    J'ai déjà généré tous les points d'impacts: comparaison entre DB version 1 et DB
    version 2. Plus une petite popote maison qui permet de générer des points d'impacts à partir de changement de valeur de champ.
    J'ai donc maintenant une liste de "table.colonne" (ce que j'appelle points d'impacts).

    Il me reste maintenant à trouver toutes les références table.colonne appelées dans les procs.

    Ensuite une petite jointure et mon analyse d'impact est terminée.

    Le problème de l'analyse syntaxique, c'est que c'est super long à faire et que les possibilité d'erreur ou d'omission sont grande: il me faut pouvoir gérer les where clause, les différents type de jointure, les truncate, delete, update...

    Le software VisualExpert me donne exactement l'output dont j'ai besoin mais je veux pouvoir faire des exports massifs et pouvoir gérer tout çà en batch. Ce qui n'est pas possible actuellement avec ce soft.

    Enfin voilà vous savez tout.

    Il y aurait peut être une autre piste si je pouvais récupérer toutes les infos lors de la compilation (une sorte de compilation en mode verbeux) mais je sais pas si c'est possible...

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    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 : 21 999
    Billets dans le blog
    6
    Par défaut
    Ceci est impossible à faire si vous n'avez pas en place une norme de nommage FORTE comme je le préconise depuis des années !

    http://www.sqlspot.com/Norme-de-developpement.html

    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/ * * * * *

  9. #9
    Membre régulier
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut
    oki avec toi le modo, mais ne serait il pas possible de récupérer ces infos au moment de la compil des procs.
    Parce que durant la compilation, le compilateur il va les vérifier toutes les références utilisées dans la proc. Or pour les vérifier, il doit les avoir trouvé...

  10. #10
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Pas exactement :

    Citation Envoyé par SQLPro
    vous avez le droit de créer une procédure qui appelle une autre procédure qui n'a pas encore été créé !
    C'est de là que vient le problème
    Si vous compilez un module qui en appelle une autre qui n'a pas encore été créé, Management vous le signale, mais compile le module

    @++

Discussions similaires

  1. Réponses: 13
    Dernier message: 18/11/2008, 14h00
  2. [SQL] Comment utiliser dans une requête une variable passée par URL
    Par foffa dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/08/2006, 12h27
  3. [FREETEXT][Sql2000] Utilisation dans une requête ?
    Par SoaB dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/10/2005, 14h49
  4. valeur d'un champ pour l'utiliser dans une requete
    Par bachilbouzouk dans le forum ASP
    Réponses: 4
    Dernier message: 08/04/2005, 16h58

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