Есть ли способ проанализировать SQL-запрос, чтобы вытащить имена столбцов и имена таблиц?

У меня есть более 150 SQL-запросов в отдельных текстовых файлах, которые мне нужно проанализировать (только фактический код SQL, а не результаты данных), чтобы идентифицировать все используемые имена столбцов и таблиц. Желательно с количеством появлений каждого столбца и таблицы. Написать новую программу синтаксического анализа SQL сложнее, чем кажется, с вложенными операторами SELECT и т.п.

Должна быть программа или код, который делает это (или что-то похожее на это), но я его не нашел.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
8
0
10 716
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Возможно, вы захотите увидеть что-то вроде этого:

JSqlParser

который использует JavaCC для анализа и возврата строки запроса в виде графа объекта. Никогда им не пользовался, поэтому за качество поручиться не могу.

Как насчет использования отчета плана выполнения в MS SQLServer? Вы можете сохранить это в xml-файле, который затем можно будет проанализировать.

Если ваше приложение должно это сделать и имеет доступ к базе данных, в которой есть таблицы и т. д., Вы можете запустить что-то вроде:

SELECT TOP 0 * FROM MY_TABLE

Используя ADO.NET. Это даст вам экземпляр DataTable, для которого вы можете запросить столбцы и их атрибуты.

Ответ принят как подходящий

На самом деле я использовал инструмент под названием SQL Pretty Printer. Вы можете приобрести настольную версию, но я просто воспользовался бесплатным онлайн-приложением. Просто скопируйте запрос в текстовое поле, установите для параметра «Вывод» значение «Список объектов БД» и нажмите кнопку «Форматировать SQL».

Он отлично работает, используя около 150 различных (и сложных) SQL-запросов.

Сохранил мой * $$ :) Спасибо.

Boris Milner 11.03.2014 01:11

Пожалуйста, используйте antlr ... Напишите грамматику n следуйте инструкциям ... которые приведены на сайте antlr ... в конце концов вы получите AST (абстрактное синтаксическое дерево). Для данного запроса ... мы можем пройти через него и вывести всю таблицу, столбец, который присутствует в запросе ..

В DB2 вы можете добавить в свой запрос что-то вроде следующего, но 1 - это минимум, который вы можете указать; он выдаст ошибку, если вы попытаетесь указать 0:

FETCH FIRST 1 ROW ONLY

Другие вопросы по теме