Esiste un modo per analizzare una query SQL per estrarre i nomi delle colonne e dei nomi delle tabelle?

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

  •  09-06-2019
  •  | 
  •  

Domanda

Ho oltre 150 query SQL in file di testo separati che devo analizzare (solo il codice SQL effettivo, non i risultati dei dati) per identificare tutti i nomi di colonna e di tabella utilizzati.Preferibilmente con il numero di volte in cui ciascuna colonna e tabella appare.Scrivere un nuovissimo programma di analisi SQL è più complicato di quanto sembri, con istruzioni SELECT annidate e simili.

Ci deve essere un programma, o un codice là fuori, che fa questo (o qualcosa di simile), ma non l'ho trovato.

È stato utile?

Soluzione

In realtà ho finito per utilizzare uno strumento chiamatoSQL Bella stampante.Puoi acquistare una versione desktop, ma io ho utilizzato solo l'applicazione online gratuita.Basta copiare la query nella casella di testo, impostare l'output su "Elenca oggetti DB" e fare clic sul pulsante Formato SQL.

Funziona benissimo utilizzando circa 150 query SQL diverse (e complesse).

Altri suggerimenti

Che ne dici di utilizzare il report del piano di esecuzione in MS SQLServer?È possibile salvarlo in un file xml che può quindi essere analizzato.

Potresti voler cercare qualcosa del genere:

JSqlParser

che utilizza JavaCC per analizzare e restituire la stringa di query come oggetto grafico.Non l'ho mai usato quindi non posso garantire la sua qualità.

Se la tua applicazione ha bisogno di farlo e ha accesso a un database che ha le tabelle, ecc., potresti eseguire qualcosa del tipo:

SELECT TOP 0 * FROM MY_TABLE

Utilizzando ADO.NET.Questo ti darebbe un'istanza DataTable per la quale potresti interrogare le colonne e i loro attributi.

Per favore, vai con Antlr...Scrivi una grammatica e segui i passaggi... che sono forniti nel sito antlr.. alla fine otterrai AST (albero della sintassi astratta).Per la query specificata...possiamo attraversarlo e portare tutta la tabella, colonna presente nella query..

In DB2 puoi aggiungere alla tua query qualcosa come quanto segue, ma 1 è il minimo che puoi specificare;genererà un errore se provi a specificare 0:

FETCH FIRST 1 ROW ONLY

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top