#mysql #sql #database
Вопрос:
Какие запросы SQL должны быть написаны как динамический SQL и не могут использовать статический SQL? Можете ли вы привести мне пример и сказать, почему? У меня был этот вопрос в одном тесте, но я не смог найти ни одного примера. Я думаю, что все запросы могут быть написаны как статический SQL.
Комментарии:
1. Любой запрос, содержащий неизвестное количество столбцов, является примером, который не может быть написан с использованием «статического» SQL
2. Примером динамического SQL может служить то, что использует phpMyAdmin . Где пользователь может генерировать свои собственные запросы
SELECT
по n-м столбцам3. Что касается терминологии, то практически все современные языки SQL используют динамический SQL. То есть отправка SQL-запроса на сервер СУБД в виде строки, которая будет проанализирована во время выполнения. Это динамический SQL. Что не является динамическим SQL? SQL, который анализируется во время компиляции. Вряд ли кто-то делает это сейчас, но это было обычным делом в 1980-х и 90-х годах. Кроме того, хранимые процедуры, которые не используют ПОДГОТОВКУ и ВЫПОЛНЕНИЕ, также не являются динамическим SQL. Запросы в сохраненном процессе анализируются при его создании.
4. @Билл Карвин-Когда вы входите в MySQLServer с помощью командной строки и создаете, удаляете, удаляете, усекаете и т. Д. И т. Д.-И даже используете простые запросы-это все не статично? Я бы рискнул сказать, что «Вряд ли кто-то делает это больше» — это натяжка?
5. В роли администратора базы данных, дизайнера, анализатора производительности/настройки,обслуживания и т.д. Я использую статический SQL , вероятно, подавляющее большинство времени. Как разработчик, я хотел бы использовать динамический SQL occaisionally — обычно для обслуживания; в качестве разработчика, используя клиентскую библиотеку, например ОРМ я бы технически помощью динамического SQL все время с ОРМ будет создание SQL на основе языковых конструкций/сопоставления, но мы обычно не думают этого; это всегда было моей uderstanding, что динамический SQL либо SQL-оператор, по причине статического запроса и впоследствии казнены.
Ответ №1:
Существует множество вариантов использования, в которых динамический SQL полезен или необходим, и они варьируются в зависимости от конкретных платформ баз данных.
Как правило, все, что связано с языком определения данных (DDL), может использовать только литералы и не может быть параметризовано, поэтому для этого требуется динамический SQL. Например, процедура, которая принимает имя таблицы и столбца в качестве параметров, должна использовать динамический SQL для построения запроса, который может выбрать указанный столбец из указанной таблицы.
Другим вариантом использования может быть преобразование строк в столбцы, где количество/имя столбцов может варьироваться, но должно быть «запечено» в запросе до компиляции, столбцы, на которые необходимо ссылаться в запросе, считываются INFORMATION_SCHEMA.COLUMNS
и используются для построения необходимого синтаксиса.
Еще один способ может заключаться в создании новой таблицы на лету на основе существующей таблицы, заданной переменной, где create table
синтаксис требует определенных имен столбцов — они извлекаются из представлений системного каталога information schema
для построения нужного create table
оператора.
Есть еще слишком много случаев, о которых стоит упомянуть, но вы поняли идею!
Ответ №2:
Если приложение позволяет пользователю использовать свои собственные критерии выбора или фильтрации, и этот выбор или критерии фильтрации должны/должны выполняться сервером SQL, а не в пространстве приложения, это должно быть сделано с помощью динамически построенного запроса.
Ответ №3:
Если запрос содержит переменные столбцы/входные данные, он должен быть сгенерирован с помощью динамического SQL. Одним из примеров может быть хранимая процедура, которая позволяет пользователю искать изменения в наборе столбцов в указанной таблице. Для того, чтобы это правильно функционировало динамически, вы не могли бы написать это без создания инструкций.