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
Uložená procedura je více 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 ...
Příklad
Zde je příklad vytvoření uložené procedury a následného provedení této uložené procedury.
-
Vytvořte uloženou proceduru
Spusťte následující příkaz proti databázi Music, kterou jsme vytvořili v tomto kurzu.
Tento příklad vytvoří uloženou proceduru s názvem AlbumsFromArtist. Vybere všechna alba od interpreta, který je zadán při spuštění uložené procedury.
CREATE PROCEDURE spAlbumsFromArtist @ArtistName varchar(255) AS SELECT AlbumName, ReleaseDate FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId WHERE Artists.ArtistName = @ArtistName; GO
-
Zobrazit uloženou proceduru
Rozbalte Programovatelnost> Uložené procedury uzel pod příslušnou databází, abyste viděli nově vytvořenou uloženou proceduru. Můžete také rozbalit Parametry uložené procedury node, abyste viděli parametry, které musíte při spuštění předat.
-
Proveďte uloženou proceduru
Nyní, když je uložená procedura vytvořena, můžete ji spustit pomocí
EXECUTE
a předání všech požadovaných parametrů.V našem příkladu musíme předat jméno umělce.
EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";
Alternativně můžete při předávání parametrů vynechat název parametru. Takto:
EXECUTE spAlbumsFromArtist "Devin Townsend";
Změnit uloženou proceduru
Uloženou proceduru můžete upravit pomocí ALTER PROCEDURE
prohlášení. Stejně jako při změně pohledu můžete změnit uloženou proceduru jednoduchým použitím nové definice uložené procedury.
-
Změňte uloženou proceduru
Spusťte následující příkaz. To přidá nový sloupec k výsledkům vráceným uloženou procedurou. K názvům sloupců také přidáváme aliasy.
ALTER PROCEDURE spAlbumsFromArtist @ArtistName varchar(255) AS SELECT al.AlbumName, al.ReleaseDate, g.Genre FROM Albums al INNER JOIN Artists ar ON al.ArtistId = ar.ArtistId INNER JOIN Genres g ON g.GenreId = al.GenreId WHERE ar.ArtistName = @ArtistName; GO
-
Proveďte uloženou proceduru
Nyní, když jsme přidali
Genre
sloupec do zobrazení, uložená procedura nyní vrátí tento sloupec, když ji spustíme.EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";