Регулярное выражение для соответствия общему синтаксису SQL? - PullRequest
16 голосов
/ 26 сентября 2008

На прошлой неделе я писал несколько модульных тестов для фрагмента кода, который генерировал некоторые операторы SQL.

Я пытался найти регулярное выражение для соответствия синтаксису SELECT, INSERT и UPDATE, чтобы я мог проверить, что мои методы генерировали допустимый SQL, и после 3-4 часов поиска и работы с различными редакторами регулярных выражений я отказался.

Мне удалось получить частичные совпадения, но поскольку раздел в кавычках может содержать любые символы, он быстро расширяется, чтобы соответствовать всему описанию.

Буду признателен за любую помощь, я не очень хорошо разбираюсь в регулярных выражениях, но я бы хотел узнать о них больше.

Кстати, это C # регулярное выражение, что я после.

Разъяснение

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

Ответы [ 13 ]

0 голосов
/ 26 сентября 2008

Чтобы проверить запросы, просто запустите их с SET NOEXEC ON , то есть, как это делает Entreprise Manager, когда вы анализируете запрос, не выполняя его.

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

0 голосов
/ 26 сентября 2008

Я предполагаю, что вы сделали что-то вроде ". *", Вместо этого попробуйте "[^"] * ", который не даст вам съесть всю строку. Это все равно даст ложные срабатывания в тех случаях, когда у вас есть \" внутри ваших строк.

0 голосов
/ 26 сентября 2008

Вы пробовали ленивые селекторы. Вместо того, чтобы соответствовать как можно большему, они совпадают как можно меньше, что, вероятно, то, что вам нужно для кавычек.

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