¿Qué es la consulta ad hoc?

167

Estoy leyendo un libro sobre SQL. En ese libro está el término Consulta Ad Hoc , que no entiendo.

¿Qué es exactamente una consulta ad hoc?

zihado
fuente

Respuestas:

225

Ad hoc es latín para "para este propósito". Puede llamarlo una consulta "sobre la marcha" o una consulta "justo así". Es el tipo de consulta SQL que simplemente escribe libremente donde lo necesita

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

... que es una consulta completamente diferente cada vez que se ejecuta esa línea de código, dependiendo del valor de myId. Lo opuesto a una consulta ad hoc es una consulta predefinida, como un Procedimiento almacenado, en el que ha creado una única consulta para todo el propósito generalizado de seleccionar de esa tabla (digamos) y pasar el ID como una variable.

David Hedlund
fuente
17
@David Hedlund, su consulta es vulnerable a SQL injection attacks... Debe usar el parámetro.
Parid0kht
45
@Paridokht: Ciertamente. No estoy abogando por ese uso, estoy explicando el concepto de una consulta ad hoc, que era la pregunta.
David Hedlund
12
@DavidHedlund: Sí, lo entiendo ... pero puede ser mejor mencionarlo en su respuesta porque hay usuarios que leen esto y no tienen idea de este ataque.
Parid0kht
46
Si un usuario lo lee y no tiene idea sobre la inyección de SQL, no está trabajando en nada que pueda ser de interés para los piratas informáticos. No vayamos a los extremos ...
Michal B.
77
Como desarrollador con años de experiencia ahora, he estado aprendiendo muchas cosas mientras buscaba algo completamente diferente de lo que buscaba. Entonces, en mi humilde opinión, agregar una oración como ' ... no te olvides de hacer los controles y la desinfección necesarios para myId here ' no causaría ningún daño.
scaryguy
24

Una consulta ad-hoc es una consulta que no se puede determinar antes del momento en que se emite la consulta. Se crea para obtener información cuando surja la necesidad y consiste en un SQL construido dinámicamente que generalmente se construye con herramientas de consulta residentes en el escritorio.

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

haltunbay
fuente
Entonces, si escribo una consulta estática y la ejecuto una vez, ¿no es "ad hoc"?
jumxozizi
1

También quiero agregar que la consulta ad hoc es vulnerable a los ataques de inyección SQL. Deberíamos tratar de evitar usarlo y usar SQL parametrizados en su lugar ( como PreparedStatement en Java ).

xli
fuente
77
Una consulta ad-hoc no es vulnerable a la inyección de SQL. Una consulta no parametizada que acepta la entrada del usuario es vulnerable a la inyección de SQL.
Ben
@Ben Una consulta ad-hoc siempre no está parametrizada. No se puede atacar la inyección SQL si no exponemos las variables a los usuarios; pero el punto es que la consulta ad-hoc es arriesgada para la inyección SQL.
xli
1

Una consulta ad-hoc es una consulta que no se puede determinar antes del momento en que se emite la consulta. Se crea para obtener información cuando surja la necesidad y consiste en un SQL construido dinámicamente que generalmente se construye con herramientas de consulta residentes en el escritorio. Una consulta ad hoc no reside en la computadora o el administrador de la base de datos, sino que se crea dinámicamente según las necesidades del usuario de datos.

En SQL, una consulta ad hoc es un comando / consulta de tipo vago cuyo valor depende de alguna variable. Cada vez que se ejecuta el comando, el resultado es diferente, dependiendo del valor de la variable. No se puede predeterminar y, por lo general, se incluye en la consulta SQL de programación dinámica. Una consulta ad hoc es de corta duración y se crea en tiempo de ejecución.

Ketan Anand
fuente
1

Una consulta ad-hoc se crea para proporcionar un conjunto de registros específico de cualquiera o varias tablas combinadas disponibles en el servidor de base de datos. Estas consultas generalmente tienen un propósito de un solo uso, y puede no ser necesario incorporarlas a ningún procedimiento almacenado para volver a ejecutarse en el futuro.

Escenario ad-hoc : recibe una solicitud de un subconjunto específico de datos con un conjunto único de variables. Si no hay una consulta escrita previamente que pueda proporcionar los resultados necesarios, debe escribir una consulta Ad-hoc para generar los resultados del conjunto de registros.

Más allá de un solo uso, las consultas Ad-hoc son procedimientos almacenados ; es decir, consultas que se almacenan dentro de la herramienta de interfaz DB. Estos procedimientos almacenados se pueden ejecutar en secuencia dentro de un módulo o macro para realizar una tarea predefinida, ya sea bajo demanda, en un horario o desencadenada por otro evento.

Escenario de procedimiento almacenado : cada mes debe generar un informe a partir del mismo conjunto de tablas y con las mismas variables (estas variables pueden ser valores predefinidos específicos, valores calculados como "fin del mes actual" o valores de entrada de un usuario). Crearía el procedimiento como una consulta ad-hoc la primera vez. Después de probar los resultados para garantizar la precisión, puede optar por implementar esta consulta. Luego, almacenaría la consulta o la serie de consultas en un módulo o macro para ejecutarlas nuevamente según sea necesario.

PV22
fuente
0

Las consultas ad hoc son aquellas que aún no están definidas y que no se necesitan de manera regular, por lo que no se incluyen en el conjunto típico de informes o consultas.

usuario3134258
fuente
¿Puedes explicar lo que estás escribiendo más? ¿Cuál es el "conjunto típico"; ¿te refieres al código compilado?
Ben
0

Las declaraciones ad-hoc son solo declaraciones T-SQL de que tiene una cláusula Where, y que la cláusula Where realmente puede tener un literal como:

Select * from member where member_no=285;

o una variable:

declare @mno INT=285;
Select * from member where member_no=@mno
A.HADDAD
fuente
-4

Una consulta ad-hoc es:

  1. Pregunta planificada previamente.
  2. Pregunta preprogramada
  3. pregunta improvisada del momento.
  4. Pregunta que no devolverá ningún resultado.
Ravi
fuente
¿Qué significa esto en términos de SQL? Además, no todas las "Preguntas que no arrojarán ningún resultado". son ad hocs.
jumxozizi
-5

La consulta ad hoc es un tipo de definición de computadora. Lo que significa que esta consulta está especialmente diseñada para obtener cualquier información cuando solo es necesaria. Predefinido consulte esto https://www.youtube.com/watch?v=0c8JEKmVXhU

Sanyog Tiwari
fuente
1
Creo que "Predefinido" es lo contrario de "ad hoc".
jumxozizi
-6

En SQL Server, "Ad Hoc Query" también se utiliza para consultas distribuidas ad hoc. Estas son consultas ad hoc en otro servidor a través de OpenRowset u OpenDatasource. Las consultas distribuidas ad hoc solo se permiten después de configurarlo. Esta es una opción de configuración del servidor.

Expansión
fuente
No se trata de SQL Server. la cuestión no se trataba de una solución entreprise en particular, sino más bien de una comprensión general del significado consultas ad hoc
Arthur