Uložená procedura je skupina příkazů SQL zkompilovaných do jednoho. Uložené procedury mohou zahrnovat obchodní logiku a další programovací konstrukce.
Na serveru SQL Server je uložená procedura skupina jednoho nebo více příkazů Transact-SQL nebo odkaz na metodu běžného runtime jazyka (CLR) Microsoft .NET Framework.
Programovatelnost
Ale uložená procedura je víc než jen dlouhý skript. Je to skript, který byl uložen na SQL Server konkrétně pod Uložené procedury uzel a může:
- Přijměte vstupní parametry (a vraťte volajícímu programu více hodnot ve formě výstupních parametrů).
- Obsahují programovací příkazy.
- Vraťte hodnotu stavu volajícímu programu, abyste označili úspěch nebo selhání a důvod jakéhokoli selhání.
Uložené procedury často obsahují obchodní logiku. Uložená procedura může například přijímat parametry, které jsou jí předány, a testovat je s těmito parametry pomocí IF
prohlášení. Např. pokud je parametrem jedna hodnota, udělejte toto, pokud je to jiná hodnota, udělejte tamto.
Uložené procedury mohou zlepšit výkon v aplikaci, protože uložená procedura je analyzována a optimalizována, jakmile je vytvořena, a poté uložena do paměti. Spuštění podmíněného dotazu prostřednictvím uložené procedury může být extrémně rychlé – ve srovnání s aplikací, která odešle dotaz přes síť na SQL Server, poté mu všechna data vrátí přes síť, aby je mohl filtrovat a vybrat pouze záznamy, které ho zajímají.
Výhody uložených procedur
Zde jsou některé z hlavních výhod používání uložených procedur:
Výhoda | Vysvětlení |
---|---|
Modulární programování | Uloženou proceduru můžete napsat jednou a pak ji volat znovu a znovu, z různých částí aplikace (a dokonce i z více aplikací). |
Výkon | Uložené procedury zajišťují rychlejší provádění kódu a snižují síťový provoz.
|
Zabezpečení | Uživatelé mohou provádět uloženou proceduru, aniž by museli přímo spouštět některý z příkazů. Uložená procedura tedy může poskytovat pokročilé databázové funkce pro uživatele, kteří by normálně k těmto úlohám neměli přístup, ale tato funkce je zpřístupněna přísně kontrolovaným způsobem. |
Jak vytvořit uloženou proceduru
Chcete-li vytvořit uloženou proceduru, použijte CREATE PROCEDURE
příkaz, za nímž následuje kód, který tvoří uloženou proceduru. Pokud bude vaše uložená procedura přijímat parametry, musí být zahrnuty za názvem.
CREATE PROCEDURE myStoredProcedure AS ... OR CREATE PROCEDURE myStoredProcedure @ParameterName DataType AS ...
Nyní vytvoříme uloženou proceduru založenou na jednom z pohledů, které jsme vytvořili dříve – RecentAlbums zobrazit.
Toto zobrazení zobrazuje všechna alba vydaná za posledních 20 let. To je v pořádku, pokud se bude muset ohlédnout jen 20 let zpět. Co když ale chcete, aby si uživatel vybral, kolik let má pokrýt?
Tento problém může vyřešit uložená procedura.
Vytvoříme uloženou proceduru, která přijímá parametr. Hodnota parametru bude počet let, které se mají prohledávat zpět. Tuto hodnotu tedy může uživatel zadat při každém spuštění uložené procedury.
-
Navrhněte uloženou proceduru
Otevřete nové okno dotazu a přidejte kód pro uloženou proceduru.
V našem případě zkopírujeme/vložíme kód z RecentArtists zobrazit a upravit horní část, aby se stala uloženou procedurou.
Přidáme parametr nazvaný
@Count
to určí, kolik let by se měla uložená procedura ohlížet zpět.Nahradíme tedy pevně zakódovanou hodnotu
20
s@Count
Ukázkový kód
Zde je kód z našeho příkladu:
CREATE PROCEDURE spRecentAlbums @Count int AS SELECT Albums.ReleaseDate, Albums.AlbumName, Genres.Genre, Artists.ArtistName, Artists.ActiveFrom FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE (Albums.ReleaseDate > DATEADD(year, - @Count, GETDATE()));
-
Vytvořte uloženou proceduru
Jakmile vše vypadá dobře, můžete provést příkaz k vytvoření uložené procedury.
Klikněte na Provést k vytvoření uložené procedury.
Jakmile bude uložená procedura vytvořena, můžete ji vidět v Průzkumníku objektů (možná budete muset aktualizovat Uložené procedury uzel jako první).
-
Proveďte uloženou proceduru
Nyní, když byla vytvořena, můžete spustit uloženou proceduru.
Otevřete nové okno dotazu, přidejte toto:
EXEC spRecentAlbums @Count = 5;
Nyní klikněte na Provést z panelu nástrojů.
Uložená procedura vrátí všechna alba vydaná za posledních 5 let.
-
Zkuste jiné parametry
Zkuste změnit hodnotu parametru, abyste viděli, jak to ovlivní výsledky.
Můžete také spustit více příkazů jeden po druhém. Pro každý výrok se zobrazí nové podokno výsledků.
Šablona uložené procedury
V SQL Server 2016 můžete vytvořit uloženou proceduru kliknutím pravým tlačítkem na Uložené procedury uzel v Průzkumníku objektů a výběrem Nový> Uložená procedura... nebo Nové> Nativně kompilovaná uložená procedura... .
Tím se otevře šablona, která je připravena k naplnění vaším vlastním specifickým postupem.
Proveďte uloženou proceduru prostřednictvím GUI
K provedení uložené procedury můžete také použít grafické uživatelské rozhraní.
-
Spusťte Provést postup Dialogové okno
V Průzkumníku objektů klikněte pravým tlačítkem na uloženou proceduru a vyberte Spustit uloženou proceduru... .
-
Parametry dodávky
Zadejte hodnotu všech parametrů, které uložená procedura vyžaduje, a klikněte na OK .
-
Výsledky
Zobrazí se výsledky.
Upravit uloženou proceduru
Pokud potřebujete upravit existující uloženou proceduru, jednoduše nahraďte CREATE
pomocí ALTER
(spolu s aktualizovaným postupem).
Tento příklad upravuje uloženou proceduru tak, aby byly výsledky seřazeny podle data vydání v sestupném pořadí:
ALTER PROCEDURE spRecentAlbums @Count int AS SELECT Albums.ReleaseDate, Albums.AlbumName, Genres.Genre, Artists.ArtistName, Artists.ActiveFrom FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE (Albums.ReleaseDate > DATEADD(year, - @Count, GETDATE())) ORDER BY Albums.ReleaseDate DESC;
Uložené procedury systému
SQL Server obsahuje velké množství systémových uložených procedur, které pomáhají při úlohách správy databáze. Mnoho úloh, které můžete provádět prostřednictvím GUI, lze provést prostřednictvím systémové uložené procedury. Některé z věcí, které můžete dělat se systémovými uloženými procedurami, například zahrnují:
- Nakonfigurujte bezpečnostní účty
- Nastavte propojené servery
- Vytvořte plán údržby databáze
- Vytvořte katalogy fulltextového vyhledávání
- Přidat vzdálené přihlášení
- Konfigurace replikace
- Nastavte naplánované úlohy
- a mnohem více...
Systémové uložené procedury mají předponu sp_ , takže je nejlepší se vyhnout použití této předpony pro vaše vlastní procedury.
Konvence pojmenování
Je dobré vyvinout konzistentní konvenci pojmenování pro vaše uložené procedury (a pro všechny ostatní objekty ve vaší databázi).
Někteří lidé před svými uloženými procedurami označují usp_ (pro označení uživatelem definované uložené procedury), ostatní ji začínají klíčovým slovem SQL, jako je select , vložte , aktualizace , smazat . Ostatní používají pro aplikaci zkratku.
Někteří používají k oddělení jednotlivých slov v uložené proceduře podtržítka (např. recent_albums ), zatímco ostatní budou používat velká a malá písmena (např. RecentAlbums ). ).
Proto je možné, že naše uložená procedura by mohla být pojmenována některým z následujících, v závislosti na použité konvenci pojmenování.
- Nedávná alba
- nedávná_alba
- uspRecentAlbums
- usp_recent_albums
- vyberte Poslední alba
- select_RecentAlbums
- select_recent_albums
- getRecentAlbums
- získejte_nedávná_alba
Dostanete obrázek. Důležitá je konzistence. Vyberte si jeden a držte se ho. Usnadní to, když potřebujete použít uloženou proceduru. Představte si, že máte skóre nebo dokonce stovky uložených procedur, a pokaždé, když nějakou spustíte, musíte k ní přejít v Průzkumníku objektů čistě proto, že si nemůžete vzpomenout, zda jste ji nazvali usp_RecentAlbums nebo uspRecentAlbums .
Jak již bylo zmíněno, nepoužívejte sp_ jako předponu názvů uložených procedur. SQL Server používá tuto předponu pro systémové uložené procedury.
SQL Server nejprve prohledá systémové uložené procedury, takže v nejlepším případě dostanete zásah do výkonu. V nejhorším případě se vaše procedura nespustí (pokud sdílí název se systémovou uloženou procedurou).