Skriv bedre S .l om 5 minutter – Introduktion til dynamisk s .l

da jeg begyndte at komme ind i Structured Languageuery Language (s .l) omkring 2014, husker jeg at skure internettet for eksempler. Jeg ville se folk sige ting som, “dette bruger dynamisk s .l” eller “det script er dynamisk.”Selvom jeg så eksemplerne, forstod jeg ikke rigtig de komponenter, der gjorde det “dynamisk”, fordi jeg var ny. Da jeg fik mere erfaring på området, lærte jeg ikke kun de tre komponenter, der udgør dynamic s .l, men også hvordan man anvender det på forskellige brugssager., Denne korte introduktion er designet til at hjælpe S .l begyndere, eller nogen anden, bedre at forstå komponenterne i dynamisk s .l.

Data for eksempler

Jeg bruger optionerne markedshandler data tilgængelige på Kaggle hvis interesseret.

Hvad er dynamisk s ?l?

selvom dens anvendelse kan blive kompliceret, er definitionen af dynamisk s .l faktisk enkel:

dynamisk s .l er en s .l-sætning, der bygger på runtime.

Dette giver dig mulighed for at opbygge en generel forespørgsel og konstruere den erklæring, du har brug for at udføre på farten ved hjælp af variabler., Jeg vil dekonstruere dette eksempel på super grundlæggende dynamisk SQL nedenfor:

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

Det modsatte af en dynamisk SQL er statisk SQL, som er en SQL-sætning, der ikke ændres på runtime. For eksempel:

SELECT * FROM orderFlow

bemærk forskellen? Den statiske s .l er hverken køre ved hjælp af en udføre kommando eller bygget ved hjælp af variabler.

Tre Trin til at Skrive Dynamisk SQL

Hvis du ønsker at skrive dynamisk SQL, så husk de tre komponenter :

  1. Erklære Variabler
    Tænke på ved hjælp af de variabler, som byggeklodser til den SQL-sætning., I eksemplet erklærede jeg en variabel kaldet dynamic_s .l og gav den datatypen nvarchar(ma.). Jeg bruger Ma.til at give mig mest plads til at indtaste en s .l-sætning.
DECLARE @dynamic_sql NVARCHAR(max)

2. Konstruere SQL-Strengen
Det faktum, at du kan angive et SQL-du vil i den variable dynamic_sql er en del af hvad der gør dette eksempel dynamisk SQL-i første omgang! Da jeg vil returnere alle resultaterne fra tabellen, orderflo., indstiller jeg variablen til en simpel select-sætning, der kan udføres uden fejl.

select @dynamic_sql = 'select * from orderFlow '

3., Udfør s .l-sætning
den erklæring, der blev bygget i trin to, skal udføres. E .ec-kommandoen bruges typisk til at køre lagrede procedurer, men kan køre enhver legit s .l-sætning gemt som en streng, som den, der er gemt i variabel dynamic_s .l.

EXEC(@dynamic_sql)

Forestil dig at arbejde med en brugergrænseflade, der er et tekstfelt, der giver brugeren mulighed for at indtaste en rå SQL-sætning, og derefter udfører denne erklæring, når en bruger klikker på kør. Jeg har brugt lignende funktionalitet i Business Intelligence produkter!, Nu hvor du kender nogle dynamiske s .l, er det let at forestille sig, hvordan det kan arbejde bag kulisserne.

Forestillet sig Brugergrænseflade

Tillykke! Du kender nu de 3 komponenter i dynamic s !l!, eksempler:

Forestil dig, at du opretter en bruger-grænseflade, der giver brugerne mulighed for at interagere med data, men i stedet for at lade dem skrive ren SQL, lader du dem til at konstruere en sætning med 2 drop-lister:

Imaginære UI 2

Bag kulisserne, brug en gemt procedure og dynamisk SQL til at udføre SQL-sætningen bygget i UI ‘ et:

Bemærk den lagrede procedure anvender bruger-input til at udfylde de to variabler., Da variablerne allerede er defineret som set i brugergrænsefladens mock-up, skal den lagrede procedure simpelthen konstruere strengen og udføre udsagnene. Jeg tilføjede et mellemrum, så brugeren ikke behøver at huske at indtaste en, når proceduren udføres., For eksempel:

Kører gemt procedure i Microsoft SQL Server Management Studios

Use Case 2:

Forestil dig, at du vil bruge en gemt procedure til at søge den orderFlow tabel for en specifik bestand symbol:

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

Bemærk den variabel, der er brugt i WHERE i Use Case 2. På den måde kan jeg indtaste et aktiesymbol og få resultater uden at skulle bruge en statisk forespørgsel igen og igen.,

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., Det kan være tilbøjeligt til S .l-injektion, hvilket gør det til et potentielt sikkerhedsproblem. S .l-injektion opstår normalt, når du beder en bruger om input, og i stedet for forventet input som et brugernavn, brugeren indtaster en s .l-sætning, der kører i databasen, hvilket forårsager uventede ting. S .l-injektion kan forårsage alvorlige problemer og er en almindelig hacker-teknik.

ydeevne kan være en anden potentiel bekymring, da eksekveringsplanen ikke kan caches. En måde at omgå dette på er at bruge stored procedures og sp_executesql kommando (i det mindste i Microsoft sql server)., Dynamiske s .l-sætninger kan blive komplicerede hurtigt og kan være vanskelige at fejle, hvilket gør dem skræmmende for nybegyndere.

Endelige tanker

selvom det kan virke vanskeligt eller kedeligt i starten, er dynamisk s .l en kraftfuld teknik, fordi det giver dig mulighed for at konstruere og udføre s .l-sætninger ved kørsel., Dynamisk SQL består af tre komponenter:

  1. Erklære Variabler
  2. Konstruere SQL-Strengen
  3. Udfør SQL

Der kan være en ulempe, som gør koden sværere at fejlsøge, men den fleksibilitet, det giver brugere kan opveje de bekymringer, især når de gennemføres korrekt.

Hvis du er interesseret i at lære mere om S ORL eller Data Science, kan du tjekke mine andre tutorials:

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *