Что такое Ad Hoc Query?


167

Я читаю книгу о SQL. В этой книге есть термин Ad Hoc Query , который я не понимаю.

Что именно представляет собой специальный запрос?

Ответы:


225

Ad hoc на латыни означает «для этой цели». Вы можете назвать это запросом «на лету» или «просто так». Это тот тип SQL-запроса, который вы просто набираете, где вам нужно

var newSqlQuery = "SELECT * FROM table WHERE id = " + myId;

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


17
@ Дэвид Хедлунд Ваш запрос уязвим для SQL injection attacks... Вы должны использовать параметр.
Parid0kht

45
@Paridokht: Конечно. Я не защищаю это использование, я объясняю концепцию специального запроса, который был вопросом.
Дэвид Хедлунд

12
@DavidHedlund: Да, я понимаю .. но, возможно, лучше упомянуть об этом в вашем ответе, потому что есть пользователи, которые читают это и не имеют никакого представления об этой атаке.
Parid0kht

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

7
Как разработчик с многолетним опытом, я многому научился, когда искал что-то совершенно другое, чем то, что я ищу. Поэтому ИМХО добавление предложения, например, « ... не забудьте выполнить необходимые проверки и очистку для myId здесь », не принесет никакого вреда.
страшно

24

Ad-Hoc Query - это запрос, который нельзя определить до момента его выдачи. Он создан для того, чтобы получать информацию при необходимости, и состоит из динамически сконструированного SQL-кода, который обычно создается с помощью резидентных инструментов запросов.

Проверьте: http://www.learn.geekinterview.com/data-warehouse/dw-basics/what-is-an-ad-hoc-query.html


Так что, если я наберу статический запрос и выполню его один раз, это не «ad hoc»?
jumxozizi

1

Также хочу добавить, что специальный запрос уязвим для атак SQL-инъекций. Мы должны стараться избегать его использования и использовать вместо этого параметризованные SQL ( например, PreparedStatement в Java ).


7
Специальный запрос не уязвим для SQL-инъекций. Непараметизированный запрос, принимающий пользовательский ввод, уязвим для SQL-инъекций.
Бен

@Ben Специальный запрос всегда не параметризован. Он не может быть атакован инъекцией SQL, если мы не выставляем переменные пользователям; но дело в том, что специальный запрос опасен для SQL-инъекций.
XL

1

Ad-Hoc Query - это запрос, который нельзя определить до момента его выдачи. Он создан для того, чтобы получать информацию при необходимости, и состоит из динамически сконструированного SQL-кода, который обычно создается с помощью резидентных инструментов запросов. Специальный запрос не находится на компьютере или в менеджере баз данных, а создается динамически в зависимости от потребностей пользователя данных.

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


1

Ad-Hoc запрос является один создан , чтобы обеспечить определенный набор записей из любого или нескольких слиты таблиц , доступных на сервере БД. Эти запросы обычно служат одноразовому назначению, и их необязательно включать в какую-либо хранимую процедуру для повторного запуска в будущем.

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

Помимо одноразового использования Ad-hoc-запрос - это хранимые процедуры ; т.е. запросы, которые хранятся в инструменте интерфейса БД. Эти хранимые процедуры могут затем выполняться последовательно в модуле или макросе для выполнения предопределенной задачи по требованию, по расписанию или по другому событию.

Сценарий хранимой процедуры : каждый месяц вам нужно генерировать отчет из одного и того же набора таблиц и с одинаковыми переменными (эти переменные могут быть конкретными предопределенными значениями, вычисленными значениями, такими как «конец текущего месяца» или входные значения пользователя). Вы создали бы процедуру как специальный запрос в первый раз. После проверки результатов для обеспечения точности вы можете выбрать развертывание этого запроса. Затем вы должны сохранить запрос или серию запросов в модуле или макросе для повторного запуска при необходимости.


0

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


Можете ли вы объяснить, что вы пишете больше? Что такое «типичный набор»; Вы имеете в виду скомпилированный код?
Бен

0

Специальные операторы - это просто операторы T-SQL, которые имеют предложение Where, а предложение Where может фактически иметь литерал вроде:

Select * from member where member_no=285;

или переменная:

declare @mno INT=285;
Select * from member where member_no=@mno

-4

Специальный запрос:

  1. Запланированный вопрос.
  2. Запланированный вопрос.
  3. подстегните вопрос.
  4. Вопрос, который не даст никаких результатов.

Что это значит в терминах SQL? Также не все «Вопросы, которые не дадут никаких результатов». являются специальными.
jumxozizi

-5

Специальный запрос - это тип определения компьютера. Это означает, что этот запрос специально разработан для получения любой информации, когда она нужна только. Предопределенные. см. этот https://www.youtube.com/watch?v=0c8JEKmVXhU


1
Я думаю, что «Предопределенный» является противоположностью «ad hoc».
jumxozizi

-6

В Sql Server «Ad Hoc Query» также используется для Ad Hoc Distributed Queries. Это специальные запросы на другом сервере через OpenRowset или OpenDatasource. Специальные распределенные запросы разрешены только после настройки. Это опция конфигурации сервера.


это не про SQL Server. вопрос был не о конкретном решении для предприятия, а об общем понимании значения специальных запросов
Артур
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.