Napsat Lépe, SQL za 5 Minut – Úvod do Dynamické SQL

Když jsem se začal dostávat do Structured Query Language (SQL) po roce 2014, vzpomínám si, praní internet pro příklady. Viděl bych, jak lidé říkají věci jako, „toto používá dynamický SQL „nebo“ tento skript je dynamický.“I když jsem viděl příklady, opravdu jsem nerozuměl komponentům, které z něj dělaly „dynamické“, protože jsem byl nový. Jak jsem získal více zkušeností v oboru, naučil jsem se nejen tři komponenty, které tvoří dynamický SQL, ale také jak jej aplikovat na různé případy použití., Tento krátký úvod je navržen tak, aby pomohl začátečníkům SQL nebo komukoli jinému lépe porozumět složkám dynamického SQL.

Data pro příklady

používám data options market trades dostupná na Kaggle v případě zájmu.

co je dynamický SQL?

ačkoli se jeho aplikace může zkomplikovat, definice dynamického SQL je ve skutečnosti jednoduchá:

Dynamic SQL je SQL příkaz, který se staví za běhu.

to vám umožní vytvořit obecný účelový dotaz a vytvořit příkaz, který musíte provést za běhu pomocí proměnných., Budu rozebírat příklad super základní dynamické SQL níže:

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

opak dynamické SQL je statické SQL, který je příkaz SQL, který se nemění za běhu. Například:

SELECT * FROM orderFlow

Všimněte si rozdílu? Statický SQL není spuštěn pomocí příkazu execute ani postaven pomocí proměnných.

tři kroky pro zápis dynamického SQL

Chcete – li napsat dynamický SQL, nezapomeňte na tři složky :

  1. deklarovat proměnné
    Přemýšlejte o použití proměnných jako stavebních bloků pro příkaz SQL., V příkladu jsem deklaroval proměnnou dynamic_sql a dal jí datový typ nvarchar(max). Používám max, abych mi dal nejvíce prostoru pro zadání příkazu SQL.
DECLARE @dynamic_sql NVARCHAR(max)

2. Construct SQL String
skutečnost, že můžete zadat libovolný SQL, který chcete do proměnné dynamic_sql je součástí toho, co dělá tento příklad dynamický SQL na prvním místě! Vzhledem k tomu, že chci vrátit všechny výsledky z tabulky orderFlow, nastavil jsem proměnnou na jednoduchý příkaz select, který lze provést bez chyby.

select @dynamic_sql = 'select * from orderFlow '

3., Execute SQL příkaz
příkaz, který byl postaven v kroku dva je třeba provést. Příkaz EXEC se obvykle používá ke spuštění uložených postupů, ale může spustit libovolný legitimní příkaz SQL uložený jako řetězec, jako je příkaz uložený v proměnné dynamic_sql.

EXEC(@dynamic_sql)

Představte si, že pracovat s uživatelským rozhraním, které má textové pole, které umožňuje uživateli zadat syrové SQL, a pak provádí toto prohlášení, když uživatel klepne na tlačítko spustit. Podobné funkce jsem použil v produktech Business Intelligence!, Nyní, když znáte nějaký dynamický SQL, je snadné si představit, jak by to mohlo fungovat v zákulisí.

Představit Uživatelské Rozhraní

Gratulujeme! Nyní znáte 3 komponenty dynamického SQL!, příklady:

Představte si, že vytváříte uživatelské rozhraní, které umožňuje uživatelům pracovat s daty, ale místo toho, aby je psát čisté SQL, nechte je vytvořit přehled pomocí 2 drop seznamy:

Imaginární UI 2

v zákulisí, pomocí uložené procedury a dynamické SQL k provedení SQL příkazu postavena v UI:

Všimněte si, že uložené procedury používá vstup uživatele k naplnění dvou proměnných., Protože proměnné jsou již definované, jak je vidět v uživatelském rozhraní mock-up, uložené procedury prostě potřebuje sestavit řetězec a spustit závěrku. Přidal jsem prostor, takže uživatel nemusí pamatovat zadat jeden při provádění postupu., Například:

Spuštění uložené procedury v Microsoft SQL Server Management Studios

Použití Případ 2:

Představte si, že chcete použít uložené procedury k dotazu orderFlow tabulce pro konkrétní burzovní symbol:

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

Všimněte si, že proměnná se používá v klauzule where v Případě Použití 2. Tímto způsobem mohu zadat symbol akcií a získat výsledky, aniž bych musel znovu a znovu používat statický dotaz.,

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., Může být náchylný k injekci SQL, což z něj činí potenciální bezpečnostní problém. SQL injection obvykle nastane, když požádáte uživatele o vstup, a místo očekávaného vstupu jako uživatelské jméno, uživatel zadá příkaz SQL, který poběží v databázi a způsobí neočekávané věci. SQL injection může způsobit vážné problémy a je běžnou hackerskou technikou.

výkon by mohl být dalším potenciálním problémem, protože plán provádění nelze uložit do mezipaměti. Způsob, jak to vyřešit, je použít uložené procedury a příkaz sp_executesql (alespoň v Microsoft sql server)., Dynamické příkazy SQL se mohou rychle komplikovat a může být obtížné je ladit, což je pro začátečníky zastrašuje.

Final Thoughts

i když se to může zpočátku zdát složité nebo únavné, dynamic SQL je výkonná technika, protože umožňuje vytvářet a spouštět příkazy SQL za běhu., Dynamické SQL se skládá ze tří částí:

  1. Deklarovat Proměnné
  2. Vytvořit Řetězec SQL
  3. Execute SQL

Tam může být trochu nevýhoda, že kód je těžší ladit, ale flexibility, dává uživatelům může převážit obavy, zejména pokud je prováděn správně.

Pokud máte zájem dozvědět se více o SQL nebo datové vědě, podívejte se na mé další návody:

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *