Що таке спеціальний запит?


167

Я читаю книгу про SQL. У цій книзі є термін Ad Hoc Query , який я не розумію.

Що саме є спеціальним запитом?

Відповіді:


225

Спеціальний латинський "для цієї мети". Ви можете назвати це запитом "на льоту" або "просто так". Це такий тип SQL запиту, який ви просто вільно вводите там, де вам це потрібно

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

... що є абсолютно різним запитом щоразу, коли виконується рядок коду, залежно від значення myId. Протилежність до спеціального запиту - це попередньо визначений запит, такий як Збережена процедура, де ви створили один запит для всієї узагальненої мети вибору з цієї таблиці (скажімо) та передайте ідентифікатор як змінну.


17
@David Hedlund ваш запит вразливий до SQL injection attacks... Ви повинні використовувати параметр.
Parid0kht

45
@Paridokht: Безумовно. Я не виступаю за таке використання, я пояснюю концепцію спеціального запиту, до якого було питання.
Девід Хедлунд

12
@DavidHedlund: Так, я розумію. Але, можливо, краще згадати це у своїй відповіді, оскільки є користувачі, які читають це і не мають уявлення про цю атаку.
Parid0kht

46
Якщо користувач читає його і не має уявлення про ін'єкцію SQL, він не працює над тим, що могло б зацікавити хакера. Не будемо йти до крайнощів ...
Міхал Б.

7
Як розробник з багаторічним досвідом роботи, я багато чому навчився, поки шукав щось зовсім інше, ніж те, що шукаю. Тож додавання речення IMHO так само, як " ... не забудьте зробити необхідний контроль та санітарія для myId тут " не спричинило б ніякої шкоди.
scaryguy

24

Спеціальний запит - це запит, який неможливо визначити до моменту надсилання запиту. Він створений для отримання інформації, коли виникає потреба, і складається з динамічно сконструйованого 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.
xli

1

Спеціальний запит - це запит, який неможливо визначити до моменту надсилання запиту. Він створений для отримання інформації, коли виникає потреба, і складається з динамічно сконструйованого SQL, який зазвичай будується інструментами запитів для резидентів. Спеціальний запит не знаходиться на комп'ютері чи в диспетчері баз даних, але динамічно створюється залежно від потреб користувача даних.

У SQL спеціальний запит - це вкладена команда / запит, яка в залежності від певної змінної. Щоразу, коли команда виконується, результат є різним, залежно від значення змінної. Він не може бути визначений заздалегідь і зазвичай підпадає під запит динамічного програмування SQL. Спеціальний запит короткочасний і створюється під час виконання.


1

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

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

Поза одноразовим запитом зберігаються процедури ; тобто запити, які зберігаються в інструменті інтерфейсу БД. Ці збережені процедури можуть бути виконані послідовно в модулі або макросі для виконання заздалегідь заданого завдання або за запитом, за розкладом, або запускається іншою подією.

Сценарій збереженої процедури : Щомісяця потрібно створювати звіт з одного і того ж набору таблиць і з однаковими змінними (ці змінні можуть бути конкретними заздалегідь заданими значеннями, обчислюваними значеннями, такими як "кінець поточного місяця", або вхідними значеннями користувача). Ви створили б процедуру як спеціальний запит вперше. Після тестування результатів для забезпечення точності ви можете розгорнути цей запит. Потім ви збережете запит або серію запитів у модулі або макросі, щоб запустити їх знову за потреби.


0

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


Чи можете ви пояснити, що ви більше пишете? Що таке "типовий набір"; Ви маєте на увазі складений код?
Бен

0

Спеціальні статуси - це лише твердження T-SQL про те, що в ньому є пункт «Де» і що «Дійсний пункт» може мати буквальний зразок:

Select * from member where member_no=285;

або змінної:

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

-4

Спеціальний запит:

  1. Попередньо заплановане питання.
  2. Заздалегідь задане питання.
  3. питання шпори моменту.
  4. Питання, яке не дасть жодних результатів.

Що це означає під термінами SQL? Також не всі "Запитання, які не дадуть результатів". є ad hocs.
jumxozizi

-5

Спеціальний запит - це тип комп'ютерного визначення. Що означає, що цей запит є спеціально розробленим для отримання будь-якої інформації лише тоді, коли вона потрібна. Заздалегідь визначений. зверніться до цього https://www.youtube.com/watch?v=0c8JEKmVXhU


1
Я думаю, що "Заздалегідь визначений" - це протилежність "ad hoc".
jumxozizi

-6

На сервері Sql "Спеціальний запит" також використовується для спеціальних розподілених запитів. Це спеціальні запити на іншому сервері через OpenRowset або OpenDatasource. Спеціальні розподілені запити дозволені лише після їх налаштування. Це параметр налаштування сервера.


мова не про сервер sql. питання
стосувалося
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.