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

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

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

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

JSqlParser - анализатор

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

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

SELECT TOP 0 * FROM MY_TABLE

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

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

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

FETCH FIRST 1 ROW ONLY

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top