Write Better SQL in 5 Minuten – Einführung in die Dynamische SQL

Wenn ich erst in die SQL (Structured Query Language) rund um 2014, erinnere ich mich, scheuern im internet für Beispiele. Ich würde sehen, dass Leute Dinge sagen wie „Dies verwendet dynamisches SQL „oder“ Dieses Skript ist dynamisch.“Obwohl ich die Beispiele gesehen habe, habe ich die Komponenten, die es „dynamisch“ gemacht haben, nicht wirklich verstanden, weil ich neu war. Als ich mehr Erfahrung auf diesem Gebiet sammelte, lernte ich nicht nur die drei Komponenten kennen, aus denen dynamisches SQL besteht, sondern auch, wie man es auf verschiedene Anwendungsfälle anwendet., Diese kurze Einführung soll SQL-Anfängern oder anderen Personen helfen, die Komponenten von Dynamic SQL besser zu verstehen.

Daten für Beispiele

Ich verwende bei Interesse die auf Kaggle verfügbaren Options Market Trades-Daten.

Was ist Dynamisches SQL?

Obwohl seine Anwendung kompliziert werden kann, ist die Definition von Dynamic SQL tatsächlich einfach:

Dynamic SQL ist eine SQL-Anweisung, die zur Laufzeit erstellt wird.

Auf diese Weise können Sie eine allgemeine Abfrage erstellen und die Anweisung erstellen, die Sie im laufenden Betrieb mithilfe von Variablen ausführen müssen., Ich werde dieses Beispiel für super basic dynamic SQL unten dekonstruieren:

DECLARE @dynamic_sql NVARCHAR(max)select @dynamic_sql = 'select * from orderFlow'EXEC(@dynamic_sql)

Das Gegenteil von dynamischem SQL ist statisches SQL, eine SQL-Anweisung, die sich zur Laufzeit nicht ändert. Zum Beispiel:

SELECT * FROM orderFlow

Beachten Sie den Unterschied? Das statische SQL wird weder mit einem execute-Befehl ausgeführt noch mit Variablen erstellt.

Drei Schritte zum Schreiben von dynamischem SQL

Wenn Sie dynamisches SQL schreiben möchten, denken Sie an die drei Komponenten:

  1. Deklarieren Sie Variablen
    Denken Sie daran, die Variablen als Bausteine für die SQL-Anweisung zu verwenden., Im Beispiel habe ich eine Variable namens dynamic_sql deklariert und ihr den Datentyp nvarchar(max) gegeben. Ich benutze max, um mir den größten Platz für die Eingabe einer SQL-Anweisung zu geben.
DECLARE @dynamic_sql NVARCHAR(max)

2. Construct SQL String
Die Tatsache, dass Sie jede SQL, die Sie in die Variable dynamic_sql eingeben möchten, ist Teil dessen, was dieses Beispiel dynamische SQL in erster Linie macht! Da ich alle Ergebnisse aus der Tabelle orderFlow zurückgeben möchte, setze ich die Variable auf eine einfache select Anweisung, die fehlerfrei ausgeführt werden kann.

select @dynamic_sql = 'select * from orderFlow '

3., SQL-Anweisung ausführen
Die Anweisung, die in Schritt zwei erstellt wurde, muss ausgeführt werden. Der Befehl EXEC wird normalerweise zum Ausführen gespeicherter Prozeduren verwendet, kann jedoch jede legitime SQL-Anweisung ausführen, die als Zeichenfolge gespeichert ist, z. B. die in der Variablen dynamic_sql gespeicherte.

EXEC(@dynamic_sql)

Stellen Sie sich vor, Sie arbeiten mit einer Benutzeroberfläche mit einem Textfeld, mit dem ein Benutzer eine rohe SQL-Anweisung eingeben kann, und führen diese Anweisung dann aus, wenn ein Benutzer auf Ausführen klickt. Ich habe ähnliche Funktionen in Business Intelligence-Produkten verwendet!, Nachdem Sie nun dynamisches SQL kennen, können Sie sich leicht vorstellen, wie es hinter den Kulissen funktionieren könnte.

Imagined User Interface

Herzlichen Glückwunsch! Sie kennen jetzt die 3 Komponenten von Dynamic SQL!, beispiele:

Stellen Sie sich vor, Sie erstellen eine Benutzeroberfläche, mit der Benutzer mit den Daten interagieren können, aber anstatt sie reines SQL schreiben zu lassen, lassen Sie sie eine Anweisung mit 2 Drop-Listen erstellen:

Imaginary UI 2

Verwenden Sie hinter den Kulissen eine gespeicherte Prozedur und dynamisches SQL, um die in der Benutzeroberfläche erstellte SQL-Anweisung auszuführen:

Beachten Sie, dass die gespeicherte Prozedur die Benutzereingabe verwendet, um die beiden Variablen zu füllen., Da die Variablen bereits im Benutzeroberflächenmodell definiert sind, muss die gespeicherte Prozedur lediglich die Zeichenfolge erstellen und die Anweisungen ausführen. Ich habe ein Leerzeichen hinzugefügt, damit der Benutzer nicht daran denken muss, eines einzugeben, wenn er die Prozedur ausführt., Beispiel:

Ausführen der gespeicherten Prozedur in Microsoft SQL Server Management Studios

Anwendungsfall 2:

Stellen Sie sich vor, Sie möchten eine gespeicherte Prozedur verwenden, um die orderFlow-Tabelle nach einem bestimmten Bestandssymbol abzufragen:

CREATE PROCEDURE sp_example2 
@stock_symbol NVARCHAR(6) = NullAS
SELECT * FROM orderFlow where sym = @stock_symbol

Beachten Sie, dass die Variable in der WHERE-Klausel in Anwendungsfall 2 verwendet wird. Auf diese Weise kann ich ein Aktiensymbol eingeben und Ergebnisse erhalten, ohne immer wieder eine statische Abfrage verwenden zu müssen.,

Running stored procedure in Microsoft SQL Server Management Studios

Results of sp_example2

The Downsides with Dynamic

There can be some downsides to using dynamic SQL., Es kann anfällig für SQL-Injection sein, was es zu einem potenziellen Sicherheitsrisiko macht. SQL Injection tritt normalerweise auf, wenn Sie einen Benutzer nach Eingaben fragen, und anstelle der erwarteten Eingabe wie einem Benutzernamen gibt der Benutzer eine SQL-Anweisung ein, die in der Datenbank ausgeführt wird und unerwartete Dinge verursacht. SQL Injection kann ernsthafte Probleme verursachen und ist eine häufige Hacker-Technik.

Die Leistung könnte ein weiteres potenzielles Problem sein, da der Ausführungsplan nicht zwischengespeichert werden kann. Eine Möglichkeit, dies zu umgehen, besteht darin, gespeicherte Prozeduren und den Befehl sp_executesql (zumindest in Microsoft SQL Server) zu verwenden., Dynamische SQL-Anweisungen können schnell kompliziert werden und schwer zu debuggen sein, was sie für Neulinge einschüchternd macht.

Letzte Gedanken

Obwohl es zunächst schwierig oder mühsam erscheinen kann, ist Dynamic SQL eine leistungsstarke Technik, da Sie SQL-Anweisungen zur Laufzeit erstellen und ausführen können., Dynamisches SQL besteht aus drei Komponenten:

  1. Variablen deklarieren
  2. SQL-String konstruieren
  3. SQL ausführen

Es kann einige Nachteile geben, wie das Debuggen des Codes erschweren, aber die Flexibilität, die es Benutzern gibt, kann die Bedenken überwiegen, insbesondere wenn es angemessen implementiert wird.

Wenn Sie mehr über SQL oder Data Science erfahren möchten, lesen Sie bitte meine anderen Tutorials:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.