Was ist eine Ad-hoc-Abfrage?


167

Ich lese ein Buch über SQL. In diesem Buch gibt es den Begriff Ad-hoc-Abfrage , den ich nicht verstehe.

Was genau ist eine Ad-hoc-Abfrage?

Antworten:


225

Ad hoc ist lateinisch für "zu diesem Zweck". Sie können es als "on the fly" -Abfrage oder als "nur so" -Abfrage bezeichnen. Es ist die Art von SQL-Abfrage, die Sie nur lose dort eingeben, wo Sie sie benötigen

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

... was bei jeder Ausführung dieser Codezeile eine völlig andere Abfrage ist, abhängig vom Wert von myId. Das Gegenteil einer Ad-hoc-Abfrage ist eine vordefinierte Abfrage, z. B. eine gespeicherte Prozedur, bei der Sie eine einzelne Abfrage für den gesamten allgemeinen Zweck der Auswahl aus dieser Tabelle (z. B.) erstellt und die ID als Variable übergeben haben.


17
@ David Hedlund Ihre Abfrage ist anfällig für SQL injection attacks... Sie müssen Parameter verwenden.
Parid0kht

45
@ Paridokht: Sicher. Ich befürworte diese Verwendung nicht, sondern erkläre das Konzept einer Ad-hoc-Abfrage, die die Frage war.
David Hedlund

12
@ DavidHedlund: Ja, ich verstehe ... aber vielleicht ist es besser, es in Ihrer Antwort zu erwähnen, weil es Benutzer gibt, die dies lesen und keine Ahnung von diesem Angriff haben.
Parid0kht

46
Wenn ein Benutzer es liest und keine Ahnung von SQL-Injection hat, arbeitet er nicht an etwas, das für Hacker von Interesse sein könnte. Gehen wir nicht bis zum Äußersten ...
Michal B.

7
Als Entwickler mit jahrelanger Erfahrung habe ich viele Dinge gelernt, während ich nach etwas völlig anderem gesucht habe als dem, wonach ich suche. IMHO würde das Hinzufügen eines Satzes wie " ... vergiss nicht, die notwendigen Kontrollen und Desinfektionen für myId hier durchzuführen " keinen Schaden anrichten.
Scaryguy

24

Eine Ad-hoc-Abfrage ist eine Abfrage, die vor dem Zeitpunkt der Abfrage nicht ermittelt werden kann. Es wird erstellt, um bei Bedarf Informationen abzurufen, und besteht aus dynamisch erstelltem SQL, das normalerweise von Desktop-residenten Abfragetools erstellt wird.

Überprüfen Sie: http://www.learn.geekinterview.com/data-warehouse/dw-basics/what-is-an-ad-hoc-query.html


Wenn ich also eine statische Abfrage eingebe und sie einmal ausführe, ist sie nicht "ad hoc"?
Jumxozizi

1

Außerdem möchte ich hinzufügen, dass Ad-hoc-Abfragen für SQL-Injection-Angriffe anfällig sind. Wir sollten versuchen, es zu vermeiden und stattdessen parametrisierte SQLs verwenden ( wie PreparedStatement in Java ).


7
Eine Ad-hoc-Abfrage ist nicht anfällig für SQL Injection. Eine nicht parametrisierte Abfrage, die Benutzereingaben akzeptiert, ist für SQL Injection anfällig.
Ben

@Ben Eine Ad-hoc-Abfrage ist immer nicht parametrisiert. Es kann keine SQL-Injection angegriffen werden, wenn die Variablen nicht für Benutzer verfügbar gemacht werden. Der Punkt ist jedoch, dass Ad-hoc-Abfragen für SQL Injection ein Risiko darstellen.
xli

1

Eine Ad-hoc-Abfrage ist eine Abfrage, die vor dem Zeitpunkt der Abfrage nicht ermittelt werden kann. Es wird erstellt, um bei Bedarf Informationen abzurufen, und besteht aus dynamisch erstelltem SQL, das normalerweise von Desktop-residenten Abfragetools erstellt wird. Eine Ad-hoc-Abfrage befindet sich nicht auf dem Computer oder im Datenbankmanager, sondern wird je nach den Anforderungen des Datenbenutzers dynamisch erstellt.

In SQL ist eine Ad-hoc-Abfrage ein lose eingegebener Befehl / eine Abfrage, deren Wert von einer Variablen abhängt. Jedes Mal, wenn der Befehl ausgeführt wird, ist das Ergebnis abhängig vom Wert der Variablen unterschiedlich. Es kann nicht vorbestimmt werden und fällt normalerweise unter die SQL-Abfrage für die dynamische Programmierung. Eine Ad-hoc-Abfrage ist von kurzer Dauer und wird zur Laufzeit erstellt.


1

Eine Ad-hoc-Abfrage wird erstellt, um ein bestimmtes Recordset aus einer oder mehreren zusammengeführten Tabellen bereitzustellen, die auf dem DB-Server verfügbar sind. Diese Abfragen dienen normalerweise einem einmaligen Zweck und müssen möglicherweise nicht in eine gespeicherte Prozedur integriert werden, um sie in Zukunft erneut auszuführen.

Ad-hoc-Szenario : Sie erhalten eine Anforderung für eine bestimmte Teilmenge von Daten mit einer eindeutigen Menge von Variablen. Wenn keine vorab geschriebene Abfrage vorhanden ist, die die erforderlichen Ergebnisse liefern kann, müssen Sie eine Ad-hoc-Abfrage schreiben, um die Recordset-Ergebnisse zu generieren.

Über eine einmalige Ad-hoc-Abfrage hinaus werden gespeicherte Prozeduren gespeichert . dh Abfragen, die im DB-Schnittstellentool gespeichert sind. Diese gespeicherten Prozeduren können dann nacheinander innerhalb eines Moduls oder Makros ausgeführt werden, um eine vordefinierte Aufgabe entweder bei Bedarf, nach einem Zeitplan oder ausgelöst durch ein anderes Ereignis auszuführen.

Szenario für gespeicherte Prozeduren : Jeden Monat müssen Sie einen Bericht aus demselben Tabellensatz und mit denselben Variablen erstellen (diese Variablen können bestimmte vordefinierte Werte, berechnete Werte wie "Ende des aktuellen Monats" oder Eingabewerte eines Benutzers sein). Sie haben die Prozedur beim ersten Mal als Ad-hoc-Abfrage erstellt. Nachdem Sie die Ergebnisse getestet haben, um die Genauigkeit sicherzustellen, können Sie diese Abfrage bereitstellen. Anschließend speichern Sie die Abfrage oder eine Reihe von Abfragen in einem Modul oder Makro, um sie bei Bedarf erneut auszuführen.


0

Ad-hoc-Abfragen sind solche, die noch nicht definiert sind und nicht regelmäßig benötigt werden. Sie sind daher nicht in den typischen Berichten oder Abfragen enthalten


Können Sie erklären, was Sie mehr schreiben? Was ist die "typische Menge"; Meinst du kompilierten Code?
Ben

0

Ad-hoc-Anweisungen sind nur T-SQL-Anweisungen, die eine Where-Klausel haben und deren Where-Klausel tatsächlich ein Literal haben kann wie:

Select * from member where member_no=285;

oder eine Variable:

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

-4

Eine Ad-hoc-Abfrage lautet:

  1. Vorgeplante Frage.
  2. Vorgeplante Frage.
  3. spontane Frage.
  4. Frage, die keine Ergebnisse liefert.

Was bedeutet das in Bezug auf SQL? Auch nicht alle "Fragen, die keine Ergebnisse liefern." sind Ad-hocs.
Jumxozizi


-6

In SQL Server wird "Ad-hoc-Abfrage" auch für verteilte Ad-hoc-Abfragen verwendet. Dies sind Ad-hoc-Abfragen auf einem anderen Server über OpenRowset oder OpenDatasource. Verteilte Ad-hoc-Abfragen sind erst nach der Konfiguration zulässig. Dies ist eine Serverkonfigurationsoption.


Hier geht es nicht um SQL Server. die Frage war nicht über eine bestimmte entreprise Lösung , sondern um ein allgemeines Verständnis der Bedeutung Ad - hoc - Abfragen
arthur
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.