Existe uma maneira de analisar uma consulta SQL para extrair os nomes das colunas e dos nomes das tabelas?
Pergunta
Tenho mais de 150 consultas SQL em arquivos de texto separados que preciso analisar (apenas o código SQL real, não os resultados dos dados) para identificar todos os nomes de colunas e tabelas usados.De preferência com o número de vezes que cada coluna e tabela aparece.Escrever um novo programa de análise SQL é mais complicado do que parece, com instruções SELECT aninhadas e coisas do gênero.
Deve haver um programa ou código que faça isso (ou algo próximo a isso), mas não o encontrei.
Solução
Na verdade, acabei usando uma ferramenta chamadaImpressora bonita SQL.Você pode comprar uma versão para desktop, mas acabei de usar o aplicativo online gratuito.Basta copiar a consulta na caixa de texto, definir a saída como "List DB Object" e clicar no botão Format SQL.
Funciona muito bem usando cerca de 150 consultas SQL diferentes (e complexas).
Outras dicas
Que tal utilizar o relatório Plano de Execução no MS SQLServer?Você pode salvar isso em um arquivo xml que pode então ser analisado.
Você pode querer procurar algo assim:
que usa JavaCC para analisar e retornar a string de consulta como um gráfico de objeto.Nunca usei, então não posso garantir sua qualidade.
Se seu aplicativo precisar fazer isso e tiver acesso a um banco de dados que contenha as tabelas, etc., você poderá executar algo como:
SELECT TOP 0 * FROM MY_TABLE
Usando ADO.NET.Isso lhe daria uma instância de DataTable para a qual você poderia consultar as colunas e seus atributos.
Por favor, vá com antlr...Escreva uma gramática e siga os passos ... que são fornecidos no site antlr ... eventualmente você obterá AST (árvore de sintaxe abstrata).Para a consulta fornecida ...podemos percorrer isso e trazer todas as tabelas e colunas que estão presentes na consulta.
No DB2 você pode anexar sua consulta com algo como o seguinte, mas 1 é o mínimo que você pode especificar;ocorrerá um erro se você tentar especificar 0:
FETCH FIRST 1 ROW ONLY