Qu'est-ce que la requête ad hoc?


167

Je lis un livre sur SQL. Dans ce livre, il y a le terme de requête ad hoc , que je ne comprends pas.

Qu'est-ce qu'une requête ad hoc exactement?

Réponses:


225

Ad hoc signifie «à cet effet» en latin. Vous pouvez appeler cela une requête "à la volée" ou une requête "juste pour". C'est le type de requête SQL que vous tapez vaguement là où vous en avez besoin

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

... qui est une requête entièrement différente chaque fois que cette ligne de code est exécutée, en fonction de la valeur de myId. Le contraire d'une requête ad hoc est une requête prédéfinie telle qu'une procédure stockée, dans laquelle vous avez créé une seule requête dans le but généralisé de sélectionner dans cette table (par exemple), et passez l'ID en tant que variable.


17
@David Hedlund votre requête est vulnérable à SQL injection attacks... Vous devez utiliser le paramètre.
Parid0kht

45
@Paridokht: Certainement. Je ne préconise pas cette utilisation, j'explique le concept d'une requête ad hoc, qui était la question.
David Hedlund

12
@DavidHedlund: Oui, je comprends ... mais peut-être vaut-il mieux le mentionner dans votre réponse car il y a des utilisateurs qui lisent ceci et n'ont aucune idée de cette attaque.
Parid0kht

46
Si un utilisateur le lit et n'a aucune idée de l'injection SQL, il ne travaille sur rien qui pourrait intéresser le pirate informatique. N'allons pas aux extrêmes ...
Michal B.

7
En tant que développeur avec des années d'expérience maintenant, j'ai appris beaucoup de choses en cherchant quelque chose de complètement différent de ce que je recherche. Donc, à mon humble avis, l' ajout d'une phrase comme « ... n'oubliez pas de faire les contrôles et la désinfection nécessaires pour myId ici » ne causerait aucun dommage.
scaryguy

24

Une requête ad hoc est une requête qui ne peut pas être déterminée avant le moment où la requête est émise. Il est créé afin d'obtenir des informations lorsque le besoin s'en fait sentir et il se compose de SQL construit dynamiquement qui est généralement construit par des outils de requête résidant sur le bureau.

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


Donc, si je tape une requête statique et l'exécute une fois, ce n'est pas "ad hoc"?
jumxozizi

1

Je souhaite également ajouter que la requête ad hoc est vulnérable aux attaques par injection SQL. Nous devrions essayer d'éviter de l'utiliser et utiliser à la place des SQL paramétrés ( comme PreparedStatement en Java ).


7
Une requête ad hoc n'est pas vulnérable à l'injection SQL. Une requête non paramétrée qui accepte les entrées utilisateur est vulnérable à l'injection SQL.
Ben

@Ben Une requête ad-hoc est toujours non paramétrée. Il ne peut pas être attaqué par injection SQL si nous n'exposons pas les variables aux utilisateurs; mais le point est que la requête ad hoc est risquée pour l'injection SQL.
xli

1

Une requête ad hoc est une requête qui ne peut pas être déterminée avant le moment où la requête est émise. Il est créé afin d'obtenir des informations lorsque le besoin s'en fait sentir et il se compose de SQL construit dynamiquement qui est généralement construit par des outils de requête résidant sur le bureau. Une requête ad hoc ne réside pas dans l'ordinateur ou dans le gestionnaire de base de données mais est créée dynamiquement en fonction des besoins de l'utilisateur des données.

En SQL, une requête ad hoc est une commande / requête de typage lâche dont la valeur dépend d'une variable. Chaque fois que la commande est exécutée, le résultat est différent, en fonction de la valeur de la variable. Il ne peut pas être prédéterminé et relève généralement d'une requête SQL de programmation dynamique. Une requête ad hoc est de courte durée et est créée au moment de l'exécution.


1

Une requête ad hoc est une requête créée pour fournir un jeu d'enregistrements spécifique à partir d'une ou de plusieurs tables fusionnées disponibles sur le serveur de base de données. Ces requêtes ont généralement un objectif à usage unique et peuvent ne pas être nécessaires à incorporer dans une procédure stockée pour être réexécutées ultérieurement.

Scénario ad hoc : vous recevez une demande pour un sous-ensemble spécifique de données avec un ensemble unique de variables. Si aucune requête pré-écrite ne peut fournir les résultats nécessaires, vous devez écrire une requête Ad-hoc pour générer les résultats du jeu d'enregistrements.

Au-delà d'une seule utilisation, les requêtes ad-hoc sont des procédures stockées ; c'est-à-dire les requêtes qui sont stockées dans l'outil d'interface de base de données. Ces procédures stockées peuvent ensuite être exécutées en séquence au sein d'un module ou d'une macro pour accomplir une tâche prédéfinie soit à la demande, selon une planification ou déclenchée par un autre événement.

Scénario de procédure stockée : chaque mois, vous devez générer un rapport à partir du même ensemble de tables et avec les mêmes variables (ces variables peuvent être des valeurs prédéfinies spécifiques, des valeurs calculées telles que «fin du mois en cours» ou des valeurs d'entrée d'un utilisateur). Vous créeriez la procédure sous forme de requête ad hoc la première fois. Après avoir testé les résultats pour garantir l'exactitude, vous pouvez choisir de déployer cette requête. Vous stockeriez ensuite la requête ou la série de requêtes dans un module ou une macro pour la réexécuter si nécessaire.


0

Les requêtes ad hoc sont celles qui ne sont pas déjà définies et qui ne sont pas nécessaires régulièrement, elles ne sont donc pas incluses dans l'ensemble typique de rapports ou de requêtes


Pouvez-vous expliquer ce que vous écrivez davantage? Quel est l '«ensemble typique»; voulez-vous dire du code compilé?
Ben

0

Les déclarations ad hoc ne sont que des déclarations T-SQL indiquant qu'il a une clause Where, et que la clause Where peut en fait avoir un littéral comme:

Select * from member where member_no=285;

ou une variable:

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

-4

Une requête Ad-Hoc est:

  1. Question pré-planifiée.
  2. Question pré-programmée.
  3. question impulsive du moment.
  4. Question qui ne renverra aucun résultat.

Qu'est-ce que cela signifie en termes SQL? De plus, pas toutes les «questions qui ne renverront aucun résultat». sont des ad hocs.
jumxozizi


-6

Dans Sql Server, "Ad Hoc Query" est également utilisé pour les requêtes distribuées Ad Hoc. Il s'agit de requêtes ad hoc sur un autre serveur via OpenRowset ou OpenDatasource. Les requêtes distribuées ad hoc ne sont autorisées qu'après configuration. Il s'agit d'une option de configuration du serveur.


il ne s'agit pas de SQL Server. la question ne portait pas sur une solution d'entreprise particulière mais plutôt sur une compréhension générale de la signification des requêtes ad hoc
arthur
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.