Che cos'è la query ad hoc?


167

Sto leggendo un libro su SQL. In quel libro c'è il termine Query ad hoc , che non capisco.

Che cos'è esattamente una query ad hoc?

Risposte:


225

Ad hoc è in latino per "per questo scopo". Potresti chiamarlo una query "al volo" o una query "proprio così". È il tipo di query SQL che si digita liberamente dove serve

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

... che è una query completamente diversa ogni volta che viene eseguita quella riga di codice, a seconda del valore di myId. L'opposto di una query ad hoc è una query predefinita come una Stored Procedure, in cui è stata creata una singola query per l'intero scopo generalizzato di selezionare da quella tabella (ad esempio) e passare l'ID come variabile.


17
@David Hedlund la tua query è vulnerabile a SQL injection attacks... Devi usare il parametro.
Parid0kht,

45
@Paridokht: Certamente. Non sto sostenendo quell'uso, sto spiegando il concetto di una query ad hoc, che era la domanda.
David Hedlund,

12
@DavidHedlund: Sì, capisco..ma potrebbe essere meglio menzionarlo nella tua risposta perché ci sono utenti che leggono questo e non hanno idea di questo attacco.
Parid0kht,

46
Se un utente lo legge e non ha idea dell'iniezione SQL, non sta lavorando a nulla che possa essere di interesse dell'hacker. Non andiamo agli estremi ...
Michal B.

7
Come sviluppatore con anni di esperienza, ho imparato molte cose mentre cercavo qualcosa di completamente diverso da quello che cerco. Quindi l'IMHO aggiungendo una frase come " ... non dimenticare di fare i controlli necessari e la sanificazione per il mio ID qui " non causerebbe alcun danno.
Scaryguy,

24

Una query ad hoc è una query che non può essere determinata prima del momento in cui la query viene emessa. Viene creato per ottenere informazioni in caso di necessità ed è costituito da SQL costruito dinamicamente, che di solito è costruito da strumenti di query residenti sul desktop.

Controlla: http://www.learn.geekinterview.com/data-warehouse/dw-basics/what-is-an-ad-hoc-query.html


Quindi, se scrivo una query statica ed eseguo una volta, non è "ad hoc"?
jumxozizi,

1

Inoltre, voglio aggiungere che la query ad hoc è vulnerabile agli attacchi SQL injection. Dovremmo cercare di evitare di usarlo e utilizzare invece SQL con parametri ( come PreparedStatement in Java ).


7
Una query ad hoc non è vulnerabile a SQL Injection. Una query non parametrizzata che accetta l'input dell'utente è vulnerabile a SQL Injection.
Ben

@Ben Una query ad hoc è sempre senza parametri. Non si può attaccare l'iniezione SQL se non si espongono le variabili agli utenti; ma il punto è che la query ad hoc è rischiosa per l'iniezione SQL.
XL

1

Una query ad hoc è una query che non può essere determinata prima del momento in cui la query viene emessa. Viene creato per ottenere informazioni in caso di necessità ed è costituito da SQL costruito dinamicamente, che di solito è costruito da strumenti di query residenti sul desktop. Una query ad hoc non risiede nel computer o nel gestore database ma viene creata in modo dinamico in base alle esigenze dell'utente dei dati.

In SQL, una query ad hoc è un comando / query tipicamente liberamente il cui valore dipende da alcune variabili. Ogni volta che viene eseguito il comando, il risultato è diverso, a seconda del valore della variabile. Non può essere predeterminato e di solito rientra nella query SQL di programmazione dinamica. Una query ad hoc è di breve durata e viene creata in fase di esecuzione.


1

Una query ad hoc è quella creata per fornire un recordset specifico da una o più tabelle unite disponibili sul server DB. Queste query di solito hanno uno scopo monouso e potrebbero non essere necessarie per essere incorporate in qualsiasi procedura memorizzata per essere eseguite nuovamente in futuro.

Scenario ad hoc : ricevi una richiesta per un sottoinsieme specifico di dati con un insieme univoco di variabili. Se non esiste una query pre-scritta in grado di fornire i risultati necessari, è necessario scrivere una query ad hoc per generare i risultati del recordset.

Oltre a una query ad hoc monouso sono memorizzate le procedure ; vale a dire query archiviate nello strumento di interfaccia DB. Queste procedure memorizzate possono quindi essere eseguite in sequenza all'interno di un modulo o macro per eseguire un'attività predefinita su richiesta, su una pianificazione o attivata da un altro evento.

Scenario di procedura memorizzata : ogni mese è necessario generare un report dallo stesso set di tabelle e con le stesse variabili (queste variabili possono essere valori predefiniti specifici, valori calcolati come "fine del mese corrente" o valori di input di un utente). La prima volta è stata creata la procedura come query ad hoc. Dopo aver testato i risultati per garantire l'accuratezza, è possibile scegliere di distribuire questa query. Quindi archiviare la query o la serie di query in un modulo o in una macro per eseguirla nuovamente secondo necessità.


0

Le query ad hoc sono quelle che non sono già definite che non sono necessarie su base regolare, quindi non sono incluse nel set tipico di report o query


Puoi spiegare cosa stai scrivendo di più? Qual è il "set tipico"; intendi codice compilato?
Ben

0

Le dichiarazioni ad hoc sono solo dichiarazioni T-SQL che ha una clausola Where e che la clausola Where può effettivamente avere un valore letterale come:

Select * from member where member_no=285;

o una variabile:

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

-4

Una query ad hoc è:

  1. Domanda pre-pianificata.
  2. Domanda pre-programmata.
  3. sprone del momento domanda.
  4. Domanda che non restituirà alcun risultato.

Cosa significa questo in termini di SQL? Inoltre, non tutte le "Domande che non restituiranno alcun risultato". sono annunci pubblicitari.
jumxozizi,


-6

Nel server SQL "Query ad hoc" viene utilizzato anche per le query distribuite ad hoc. Si tratta di query ad hoc su un altro server tramite OpenRowset o OpenDatasource. Le query distribuite ad hoc sono consentite solo dopo averlo configurato. Questa è un'opzione di configurazione del server.


non si tratta di SQL Server. la domanda non riguardava una particolare soluzione imprenditoriale, ma piuttosto una comprensione generale del significato delle interrogazioni ad hoc
Arthur,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.