Microsoft SQL Server poskytuje mechanismus uložené procedury pro zjednodušení procesu vývoje databáze tím, že seskupí příkazy Transact-SQL do spravovatelných bloků. Uložené procedury jsou oceňovány většinou vývojářů serveru SQL Server, kteří hledají efektivitu a bezpečnostní výhody, které prožívají.
Výhody použití uložených procedur
Proč by měl vývojář používat uložené procedury?
Zde jsou klíčové výhody této technologie:
- Předkompilované provedení: SQL Server sestavuje každou uloženou proceduru jednou a poté znovu použije plán provádění. Výsledkem je obrovské zvýšení výkonu při opakovaném uložení uložených procedur.
- Snížená návštěvnost klientů / serverů: Pokud je ve vašem prostředí problém s šířkou pásma sítě, rádi vám ukážeme, že uložené procedury mohou omezit dlouhé SQL dotazy na jediný řádek, který je přenášen přes drát.
- Efektivní opětovné použití kódu a programování abstrakce: Uložené procedury mohou využívat více uživatelé a klientské programy. Pokud je využijete plánovaným způsobem, zjistíte, že vývojový cyklus trvá méně času.
- Vylepšené ovládací prvky zabezpečení: Uživatelům můžete udělit oprávnění ke spuštění uložené procedury nezávisle na oprávněních tabulky.
Uložené procedury jsou podobné uživatelsky definovaným funkcím, ale existují jemné rozdíly.
Struktura
Uložené procedury jsou podobné konstrukcím v jiných programovacích jazycích.
Přijmou data ve formě vstupních parametrů, které jsou zadány v době provedení. Tyto vstupní parametry (pokud jsou implementovány) jsou využívány při provádění řady příkazů, které vytvářejí nějaký výsledek. Tento výsledek se vrací do volajícího prostředí pomocí sady záznamů, výstupních parametrů a návratového kódu.
To může znít jako ústa, ale zjistíte, že uložené procedury jsou vlastně poměrně jednoduché.
Příklad
Podívejme se na praktický příklad, který se týká tabulky s názvem inventář zobrazeného v dolní části této stránky. Tyto informace jsou aktualizovány v reálném čase a správci skladu neustále kontrolují úrovně produktů uložených v jejich skladu a jsou k dispozici k odeslání. V minulosti by každý správce spouštěl dotazy podobné následujícím:
SELECT produkt, množstvíZ inventářeWHERE Warehouse = 'FL'
To vedlo k neefektivnímu výkonu na serveru SQL Server. Pokaždé, když správce skladu spustil dotaz, byl databázový server nucen znovu zkompilovat dotaz a spustit ho od začátku. To také vyžadovalo, aby správce skladu měl znalosti o SQL a příslušná oprávnění k přístupu k informacím o tabulce.Místo toho lze tento proces zjednodušit pomocí uložené procedury. Zde je kód pro postup s názvem sp_GetInventory, který načte úroveň zásob pro daný sklad. Správce skladů ve Floridě pak může přistupovat k hladinám inventáře vydáním příkazu: Správce skladů v New Yorku může použít stejnou uloženou proceduru pro přístup k inventářům této oblasti: Je to jednoduchý příklad, ale přínos abstrakce je zde vidět. Správce skladů nemusí chápat SQL nebo vnitřní fungování procedury. Z pohledu výkonů se ukládá záchranná procedura. SQL Server vytvoří plán spouštění jednou a poté jej znovu použije připojením příslušných parametrů v době provedení.Nyní, když jste se naučili výhody uložených procedur, vyjděte je a použijte je. Vyzkoušejte několik příkladů a změřte dosažené zlepšení výkonu - budete ohromeni! Tabulka zásobCREATE POSTUP sp_GetInventory@location varchar (10)TAK JAKOSELECT produkt, množstvíZ inventářeWHERE Warehouse = @location
EXECUTE sp_GetInventory 'FL'
EXECUTE sp_GetInventory 'NY'
ID Produkt Sklad Množství 142 Zelené fazole NY 100 214 Hrách FL 200 825 Kukuřice NY 140 512 Lima fazole NY 180 491 Rajčata FL 80 379 Vodní meloun FL 85