Как определить, является ли SQL-запрос SELECT? - PullRequest
3 голосов
/ 20 ноября 2010

Утро SO.

РЕДАКТИРОВАТЬ

Я хотел бы провести некоторую проверку SQL-запросов, чтобы убедиться, что этот запрос является SELECT, а не UPDATE или DELETE.или INSERT, или любое другое странное выражение sql.

Я знаю, что самый простой способ - сопоставить «^ SELECT», НО:

  • , запрос может начинаться с "("как

    (ВЫБРАТЬ * ОТ БЛАГОТ, ГДЕ id> 1 ПРЕДЕЛ 3) СОЮЗ (ВЫБРАТЬ * ...)

  • запрос может начинаться с "С РЕКУРСИМОЙ"

    С рекурсивным cte AS (SELECT * FROM blah)

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

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ : я хочу проверить, является ли это запросом PURE Select:)

Ответы [ 3 ]

1 голос
/ 28 февраля 2011

Обычный способ справиться с этим - использовать разрешения - вы предоставляете пользователю, выполняющему запрос, разрешения db_reader на сервере sql, но не db_writer или что-либо еще.Затем вы обрабатываете ошибку / исключение в случае сбоя запроса.

1 голос
/ 20 ноября 2010

Вы также можете сделать обновленные состояния состояний, которые запускают свои собственные SELECTs внутри, чтобы найти данные для обновления, или много других способов встроить операторы друг в друга ... Предполагая, что вы не используете "SELECT" в качестве данных или имен полей простозапустите регулярное выражение для /\bselect\b/i, иначе вам понадобится полноценный парсер.

Редактируйте: также: /\b(insert|update)\b/i инвертируйте, чтобы убедиться, что в нем нет ни одного из них.

0 голосов
/ 20 ноября 2010

, если запрос начинается с слова "select" (без учета регистра), то это запрос на выборку

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