Разделить блоки операторов SQL с помощью регулярного выражения в C # - PullRequest
0 голосов
/ 04 декабря 2008

Можем ли мы написать регулярное выражение таким образом, чтобы оно разбивало хранимую процедуру на несколько операторов SQL. Следует разделить обновление, удалить операторы select и т. Д.

Редактировать: моя попытка решить проблему http://tsqlparsergdr.codeplex.com/

Ответы [ 3 ]

2 голосов
/ 04 декабря 2008

Если вы работаете с известным набором процедур SQL, должно быть довольно легко изучить их и придумать набор регулярных выражений, чтобы разделить их по мере необходимости.

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

Как рекомендовал предыдущий автор, вам действительно нужен полный синтаксический анализатор, например, сгенерированный ANTLR или Javacc (есть ли C # -эквивалент?).

В сети имеется несколько определений грамматики SQL-92 для этих генераторов синтаксических анализаторов, поэтому большая часть работы за вас уже проделана - оставшаяся часть - написание логики приложения синтаксического анализатора - все еще далека от тривиальной.

2 голосов
/ 04 декабря 2008

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

Для всей процедуры потребуется набор выражений регулярных выражений. То есть регулярное выражение для mach просто вставляет операторы, которые могут охватывать много строк и, возможно, содержат локальные переменные из proc и т. д.

1 голос
/ 04 декабря 2008

Для разбора произвольных хранимых процедур вам гораздо лучше с анализатором SQL. Попытка разобрать произвольный SQL с помощью регулярных выражений равносильна написанию вашего собственного анализатора.

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

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