Есть ли способ синтаксического анализа SQL-запроса, чтобы извлечь имена столбцов и таблиц? - PullRequest
6 голосов
/ 11 сентября 2008

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

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

Ответы [ 6 ]

10 голосов
/ 29 января 2010

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

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

4 голосов
/ 11 сентября 2008

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

2 голосов
/ 21 ноября 2008

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

SELECT TOP 0 * FROM MY_TABLE

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

2 голосов
/ 11 сентября 2008

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

JSqlParser

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

0 голосов
/ 25 мая 2018

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

FETCH FIRST 1 ROW ONLY

0 голосов
/ 23 ноября 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...