Existe-t-il un moyen d'analyser une requête SQL pour extraire les noms de colonnes et de tables ?

StackOverflow https://stackoverflow.com/questions/56677

  •  09-06-2019
  •  | 
  •  

Question

J'ai plus de 150 requêtes SQL dans des fichiers texte séparés que je dois analyser (uniquement le code SQL réel, pas les résultats des données) afin d'identifier tous les noms de colonnes et de tables utilisés.De préférence avec le nombre de fois où chaque colonne et tableau apparaît.L'écriture d'un tout nouveau programme d'analyse SQL est plus délicate qu'il n'y paraît, avec des instructions SELECT imbriquées, etc.

Il doit y avoir un programme ou un code qui fait cela (ou quelque chose de proche), mais je ne l'ai pas trouvé.

Était-ce utile?

La solution

En fait, j'ai fini par utiliser un outil appeléSQL jolie imprimante.Vous pouvez acheter une version de bureau, mais je viens d'utiliser l'application en ligne gratuite.Copiez simplement la requête dans la zone de texte, définissez la sortie sur "Liste des objets de base de données" et cliquez sur le bouton Formater SQL.

Cela fonctionne très bien en utilisant environ 150 requêtes SQL différentes (et complexes).

Autres conseils

Que diriez-vous d'utiliser le rapport du plan d'exécution dans MS SQLServer ?Vous pouvez l'enregistrer dans un fichier XML qui peut ensuite être analysé.

Vous voudrez peut-être chercher quelque chose comme ceci :

JSqlParser

qui utilise JavaCC pour analyser et renvoyer la chaîne de requête sous forme de graphique d'objet.Je ne l'ai jamais utilisé, je ne peux donc pas garantir sa qualité.

Si votre application doit le faire et a accès à une base de données contenant les tables, etc., vous pouvez exécuter quelque chose comme :

SELECT TOP 0 * FROM MY_TABLE

Utilisation d'ADO.NET.Cela vous donnerait une instance DataTable pour laquelle vous pourriez interroger les colonnes et leurs attributs.

S'il vous plaît, allez avec antlr...Écrivez une grammaire et suivez les étapes .. qui sont données sur le site antlr .. vous obtiendrez finalement AST (arbre de syntaxe abstraite).Pour la requête donnée...nous pouvons parcourir cela et apporter toutes les tables et colonnes présentes dans la requête.

Dans DB2, vous pouvez ajouter à votre requête quelque chose comme ce qui suit, mais 1 est le minimum que vous pouvez spécifier ;cela générera une erreur si vous essayez de spécifier 0 :

FETCH FIRST 1 ROW ONLY

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top