scrieți SQL mai bine în 5 minute-Introducere în SQL dinamic

când am început să intru în limbajul de interogare structurat (SQL) în jurul anului 2014, îmi amintesc că am curățat internetul pentru exemple. Aș vedea oameni spun chestii de genul, ” acest lucru utilizează SQL dinamic „sau” acel script este dinamic.”Deși am văzut exemplele, nu am înțeles cu adevărat componentele care au făcut-o „dinamică” pentru că eram nou. Pe măsură ce am acumulat mai multă experiență în domeniu, am învățat nu numai cele trei componente care alcătuiesc SQL dinamic, ci și cum să-l aplic în diverse cazuri de utilizare., Această scurtă introducere este concepută pentru a ajuta începătorii SQL sau oricine altcineva să înțeleagă mai bine componentele SQL dinamic.

date pentru exemple

folosesc datele despre tranzacțiile de pe piață disponibile pe Kaggle dacă sunteți interesat.

ce este SQL dinamic?deși aplicația sa se poate complica, definiția SQL dinamic este de fapt simplă:

dynamic SQL este o instrucțiune SQL care se construiește în timpul rulării.acest lucru vă permite să construiți o interogare de uz general și să construiți instrucțiunea pe care trebuie să o executați din mers prin utilizarea variabilelor., Voi deconstrui acest exemplu de SQL dinamic super basic de mai jos:

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

opusul unui SQL dinamic este SQL static, care este o declarație SQL care nu se schimbă în timpul rulării. De exemplu:

SELECT * FROM orderFlow

observați diferența? SQL static nu este rulat folosind o comandă executa nici construit folosind variabile.

trei pași pentru a scrie SQL dinamic

Dacă doriți să scrieți SQL dinamic, amintiți – vă cele trei componente :

  1. declarați variabilele
    gândiți-vă la utilizarea variabilelor ca blocuri de construcție pentru instrucțiunea SQL., În exemplu, am declarat o variabilă numită dynamic_sql și i-am dat tipul de date nvarchar(max). Eu folosesc max pentru a-mi oferi cel mai mult spațiu pentru a introduce o declarație SQL.
DECLARE @dynamic_sql NVARCHAR(max)

2. Construi SQL String
faptul că puteți introduce orice SQL doriți în dynamic_sql variabilă face parte din ceea ce face ca acest exemplu SQL dinamic, în primul rând! Deoarece vreau să returnez toate rezultatele din tabel, orderFlow, am setat variabila la o simplă instrucțiune select care poate fi executată fără eroare.

select @dynamic_sql = 'select * from orderFlow '

3., Executați instrucțiunea SQL
declarația care a fost construită în pasul doi trebuie executată. Comanda EXEC este de obicei folosit pentru a rula proceduri stocate, dar poate rula orice declarație SQL legit stocate ca un șir de caractere, cum ar fi cel stocat în dynamic_sql variabilă.

EXEC(@dynamic_sql)

Imaginați-vă că lucrați cu o interfață de utilizator care are un câmp text care permite unui utilizator să introducă o instrucțiune SQL brută și apoi execută acea instrucțiune atunci când un utilizator face clic pe executare. Am folosit funcționalități similare în produsele Business Intelligence!, Acum că știți ceva SQL dinamic, este ușor să vă imaginați cum ar putea funcționa în spatele scenei.

Imaginat Interfață de Utilizator

Felicitări! Acum cunoașteți cele 3 componente ale SQL dinamic!, exemple:

Imaginați-vă că sunteți crearea unui utilizator-interfață, care permite utilizatorilor să interacționeze cu datele, dar în loc de permițându-le să scrie pur SQL, tu lasă-i să construiască o declarație folosind 2 liste:

Imaginar UI 2

în Spatele scenei, utilizați o procedură stocată și dinamice SQL pentru a executa instrucțiunea SQL construite în UI:

Observați procedura stocată utilizează o intrare de utilizator pentru a popula cele două variabile., Deoarece variabilele sunt deja definite așa cum se vede în macheta interfeței cu utilizatorul, procedura stocată trebuie pur și simplu să construiască șirul și să execute declarațiile. Am adăugat un spațiu, astfel încât utilizatorul nu trebuie să-și amintească să introducă unul atunci când execută procedura., De exemplu:

Execută proceduri stocate în Microsoft SQL Server Management Studios

Caz de utilizare 2:

Imaginați-vă că doriți să utilizați o procedură stocată pentru a interoga orderFlow masă pentru un anumit simbol bursier:

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

Observați variabilă este folosită în cazul în CARE clauza în Caz de Utilizare 2. În acest fel, pot introduce un simbol stoc și pot obține rezultate fără a fi nevoie să folosesc o interogare statică de mai multe ori.,

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., Poate fi predispus la injecția SQL, ceea ce îl face o potențială problemă de securitate. SQL injection apare de obicei atunci când cereți unui utilizator introducerea și, în loc de intrarea așteptată ca un nume de utilizator, utilizatorul introduce o instrucțiune SQL care va rula pe baza de date provocând lucruri neașteptate să apară. Injecția SQL poate provoca probleme grave și este o tehnică comună a hackerilor.

performanța ar putea fi o altă preocupare potențială, deoarece planul de execuție nu poate fi memorat în cache. O modalitate de a rezolva acest lucru este utilizarea procedurilor stocate și a comenzii sp_executesql (cel puțin în Microsoft sql server)., Declarațiile SQL dinamice pot deveni complicate rapid și pot fi dificil de depanat, făcându-le intimidante pentru începători.deși poate părea complicat sau obositor la început, dynamic SQL este o tehnică puternică, deoarece vă permite să construiți și să executați instrucțiuni SQL în timpul rulării., Dinamic SQL este format din trei componente:

  1. Declare variabile
  2. Construct SQL String
  3. Execute SQL

poate exista unele dezavantaj ca a face Codul mai greu de depanare, dar flexibilitatea oferă utilizatorilor pot depăși preocupările mai ales atunci când sunt puse în aplicare în mod corespunzător.dacă sunteți interesat să aflați mai multe despre SQL sau știința datelor, vă rugăm să consultați celelalte tutoriale ale mele:

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *