Írjon jobb SQL 5 perc alatt-bevezetés a dinamikus SQL

amikor elkezdtem bekerülni strukturált lekérdezés nyelv (SQL) körül 2014, emlékszem súroló az interneten példákat. Azt látom, hogy az emberek olyan dolgokat mondanak, mint: “ez dinamikus SQL-t használ “vagy” ez a szkript dinamikus.”Bár láttam a példákat, nem igazán értettem azokat az összetevőket, amelyek “dinamikussá” tették, mert új voltam. Ahogy több tapasztalatot szereztem a területen, nem csak a dinamikus SQL-t alkotó három komponenst tanultam meg, hanem azt is, hogyan kell alkalmazni a különböző felhasználási esetekre., Ez a rövid bevezetés célja, hogy segítsen SQL kezdők, vagy bárki más, jobban megértsék a komponensek dinamikus SQL.

példák adatai

a Kaggle-n elérhető opciós piaci kereskedési adatokat használom, ha érdekel.

mi a dinamikus SQL?

bár az alkalmazás bonyolult lehet, A dinamikus SQL meghatározása valójában egyszerű:

A dinamikus SQL egy SQL utasítás, amely futásidőben épül fel.

Ez lehetővé teszi egy általános célú lekérdezés elkészítését, valamint a változók használatával a menet közben végrehajtandó utasítás összeállítását., A super basic dynamic SQL alábbi példáját dekonstruálom:

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

a dinamikus SQL ellentéte statikus SQL, amely egy SQL utasítás, amely futásidőben nem változik. Például:

SELECT * FROM orderFlow

észreveszi a különbséget? A statikus SQL nem fut egy execute parancsot, sem épített változók.

három lépés a dinamikus SQL írásához

ha dinamikus SQL-t szeretne írni, emlékezzen a három összetevőre:

  1. deklarálja a változókat
    gondoljon arra, hogy a változókat építőelemként használja az SQL utasításhoz., A példában deklaráltam egy dynamic_sql nevű változót, majd megadtam neki az Nvarchar(max) adattípust. A max segítségével megadom a legtöbb helyet az SQL utasítás megadásához.
DECLARE @dynamic_sql NVARCHAR(max)

2. Construct SQL String
az a tény, hogy megadhat bármilyen SQL szeretne a változó dynamic_sql része, ami ezt a példát dinamikus SQL az első helyen! Mivel vissza akarom adni az összes eredményt a táblázatból, orderFlow, beállítom a változót egy egyszerű select utasításra, amely hiba nélkül végrehajtható.

select @dynamic_sql = 'select * from orderFlow '

3., Az SQL utasítás végrehajtása
a második lépésben beépített nyilatkozatot végre kell hajtani. Az EXEC parancsot általában a tárolt eljárások futtatására használják, de futtathat bármilyen legitim SQL utasítást, amelyet karakterláncként tárolnak, mint például a változó dynamic_sql.

EXEC(@dynamic_sql)

képzelje el, hogy olyan felhasználói felülettel dolgozik, amely szöveges mezővel rendelkezik, amely lehetővé teszi a felhasználó számára, hogy nyers SQL-nyilatkozatot írjon be, majd végrehajtja ezt a kijelentést, amikor a felhasználó rákattint. Hasonló funkciókat használtam az üzleti intelligencia termékekben!, Most, hogy ismeri a dinamikus SQL-t, könnyű elképzelni, hogyan működik a színfalak mögött.

id=”e6e635db05″>

gratulálok! Most már ismeri a dinamikus SQL 3 összetevőjét!, példa:

Képzeld el, hogy létrehoz egy felhasználói felület, amely lehetővé teszi a felhasználók számára, hogy befolyásolja az adatokat, de ahelyett, hogy őket írni, tiszta SQL, hagyja őket építeni egy nyilatkozatot használata 2 csepp listák:

Képzeletbeli UI 2

a színfalak Mögött, használjon egy tárolt eljárás, valamint a dinamikus SQL, hogy végre az SQL-utasítás épült a UI:

Értesítés a tárolt eljárást használ a felhasználói input, hogy feltölti a két változó., Mivel a változókat már a felhasználói felület makettjében látható módon definiáljuk, a tárolt eljárásnak egyszerűen ki kell építenie a karakterláncot, majd végre kell hajtania a kijelentéseket. Hozzáadtam egy helyet, így a felhasználónak nem kell emlékeznie arra, hogy beírja az egyiket az eljárás végrehajtásakor., Például:

Futó tárolt eljárás a Microsoft SQL Server Management Studios

A használati Eset 2:

Képzeld el szeretné használni egy tárolt eljárás, hogy a lekérdezés az orderFlow táblázat egy adott állomány szimbólum:

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

Észre a változót használjuk a where záradékot, AHOL a használati Eset 2. Így megadhatok egy stock szimbólumot, és anélkül kaphatok eredményt, hogy újra és újra statikus lekérdezést kellene használnom.,

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., Hajlamos lehet az SQL injekcióra, ami potenciális biztonsági problémát jelent. Az SQL injection általában akkor fordul elő, amikor a felhasználót bemenetre kéri, és a várt bemenet helyett, mint például a felhasználónév, a felhasználó belép egy SQL utasításba, amely az adatbázisban fut, ami váratlan dolgokat okoz. Az SQL injekció komoly problémákat okozhat, és gyakori hacker technika.

A teljesítmény további potenciális aggodalomra adhat okot, mivel a végrehajtási tervet nem lehet gyorsítótárazni. Ennek egyik módja a tárolt eljárások és a sp_executesql parancs használata (legalábbis a Microsoft SQL Serverben)., A dinamikus SQL utasítások gyorsan bonyolultabbá válhatnak, és nehéz lehet hibakeresést végezni, hogy megfélemlítsék őket az újoncok számára.

végső gondolatok

bár eleinte trükkösnek vagy unalmasnak tűnhet, a dynamic SQL hatékony technika, mivel lehetővé teszi az SQL utasítások felépítését és végrehajtását futási időben., Dinamikus SQL három összetevőből áll:

  1. Deklarálni a Változókat
  2. Konstrukció SQL String
  3. Execute SQL

Van egy kis hátránya, mint az, hogy a kód nehezebb elhárítani, de a rugalmasságot ad a felhasználók meghaladják a vonatkozik, különösen, ha végre megfelelően.

Ha többet szeretne megtudni az SQL-ről vagy az Adattudományról, kérjük, nézze meg a többi oktatóanyagot:

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük