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:
- 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.
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:
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: