Skriv Bedre SQL i 5 Minutter – Introduksjon til Dynamisk SQL

Når jeg begynte å komme inn Structured Query Language (SQL) rundt 2014, jeg husker scouring internett for å finne eksempler. Jeg ville se folk si ting som, «Dette bruker dynamisk SQL» eller «At manus er dynamisk.»Selv om jeg så eksempler, jeg hadde egentlig ikke forstå komponentene som gjorde det «dynamiske» fordi jeg var ny. Som jeg fikk mer erfaring i feltet, jeg lærte ikke bare om de tre komponentene som utgjør dynamisk SQL, men også hvordan du skal bruke det til ulike bruker-tilfeller., Denne korte introduksjonen er utviklet for å hjelpe SQL nybegynnere, eller noen andre, for bedre å forstå deler av dynamisk SQL.

Data for Eksempler på

jeg bruker valg handler i markedet og data som er tilgjengelige på Kaggle hvis du er interessert.

Hva er Dynamisk SQL?

Selv om bruken kan bli komplisert, definisjonen av dynamisk SQL er egentlig enkel:

Dynamisk SQL er en SQL-setning som bygger på kjøring.

Dette kan du bygge opp en generell spørring og konstruere den setningen du trenger for å kjøre på fly gjennom bruk av variabler., Jeg vil dekonstruere dette eksempel på super grunnleggende dynamisk SQL nedenfor:

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

Det motsatte av en dynamisk SQL er statisk SQL som er en SQL-setning som ikke endre seg ved kjøring. For eksempel:

SELECT * FROM orderFlow

Merke forskjellen? Den statiske SQL er verken kjør ved hjelp av en utfør kommando eller bygget ved hjelp av variabler.

Tre Trinn for å Skrive Dynamisk SQL

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

  1. Deklarere Variabler
    Tenk på å bruke variabler som byggesteiner for SQL-setningen., I eksempelet, jeg erklært en variabel kalt dynamic_sql og ga den data-type nvarchar(max). Jeg bruker maks for å gi meg den mest plass til å skrive inn en SQL-setning.
DECLARE @dynamic_sql NVARCHAR(max)

2. Bygge SQL-Streng
Det faktum at du kan taste inn en SQL-du vil i variabelen dynamic_sql er en del av det som gjør dette eksemplet dynamisk SQL-i første omgang! Siden jeg ønsker å returnere alle resultatene fra bordet, orderFlow, satt jeg variabel til en enkelt velge uttalelse som kan kjøres uten feil.

select @dynamic_sql = 'select * from orderFlow '

3., Execute SQL-uttrykk
uttalelsen som ble bygget i trinn to er behov for å bli henrettet. EXEC kommandoen brukes vanligvis til å kjøre lagrede prosedyrer, men kan kjøre noen legit SQL-setning som er lagret som en string, som er lagret i variabelen dynamic_sql.

EXEC(@dynamic_sql)

Tenk å arbeide med et brukergrensesnitt som har et tekstfelt som lar en bruker til å skrive inn et raw-SQL-setningen, og så utfører den uttalelsen når en bruker klikker du kjør. Jeg har brukt lignende funksjonalitet i Business Intelligence-produkter!, Nå som du vet litt dynamisk SQL, det er lett å forestille seg hvordan det kan være å jobbe bak kulissene.

Forestilt Brukergrensesnitt

Gratulerer! Vet du nå den 3 komponenter av dynamisk SQL!, eksempler:

Tenk deg at du er å lage et brukergrensesnitt som tillater brukere å samhandle med data, men i stedet for å la dem skrive ren SQL, du lar dem lage en uttalelse med 2 slippe lister:

Imaginære UI 2

Bak kulissene, bruke en lagret prosedyre og dynamisk SQL å utføre SQL-setningen bygget i BRUKERGRENSESNITTET:

legg Merke til at den lagrede prosedyren benytter brukerundersøkelser for å fylle ut de to variablene., Siden variablene som allerede er definert som vist i brukergrensesnittet mock-up, lagret prosedyre rett og slett behov for å konstruere streng og utføre uttalelser. Jeg har lagt til et mellomrom, slik at brukeren ikke trenger å huske å skrive en når du utfører denne prosedyren., For eksempel:

Kjører lagret prosedyre i Microsoft SQL Server Management Studios

Use Case 2:

Tenk deg at du vil bruke en lagret prosedyre for å søke orderFlow bordet for en spesifikk stock symbol:

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

legg Merke til at variabelen er brukt i WHERE-setningsdelen i Use Case 2. På den måten, jeg kan gå inn i et stock symbol og få resultater uten å måtte bruke en statisk spørring over og over.,

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 utsatt for SQL-injeksjon, noe som gjør det en potensiell sikkerhet bekymring. SQL-injeksjon skjer vanligvis når du spør en bruker for innspill, og i stedet for forventet innspill som brukernavn, brukeren går inn i en SQL-setning som vil kjøre på database forårsaker uventede ting til å skje. SQL-injeksjon kan føre til alvorlige problemer og er en felles hacker teknikk.

Ytelse kan være en annen mulig bekymring siden gjennomføringsplan ikke bli lagret. En måte å omgå dette på er å bruke lagrede prosedyrer og sp_executesql kommando (i hvert fall i Microsoft sql server)., Dynamisk SQL-setninger kan bli komplisert rask og kan være vanskelig å feilsøke noe som gjør dem skremmende for nybegynnere.

Siste Tanker

Selv om det kan virke vanskelig eller kjedelig ved første, dynamisk SQL er en kraftfull teknikk fordi det tillater deg å bygge og kjøre SQL-setninger under kjøring., Dynamisk SQL består av tre komponenter:

  1. Deklarere Variabler
  2. Bygge SQL-Streng
  3. Utføre SQL

Det kan være noen ulemper som gjør koden vanskeligere å feilsøke, men den fleksibiliteten det gir brukerne kan oppveie gjelder spesielt når implementert riktig.

Hvis du er interessert i å lære mer om SQL eller Data Vitenskap, sjekk ut min andre tutorials:

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *