sql >> Databáze >  >> RDS >> Sqlserver

Vytvořte uloženou proceduru v SQL Server 2017

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.
  • Rychlejší provádění:Uložené procedury jsou analyzovány a optimalizovány, jakmile jsou vytvořeny a uložená procedura je uložena v paměti. To znamená, že se spustí mnohem rychleji než odesílání mnoha řádků kódu SQL z vaší aplikace na SQL Server. To vyžaduje, aby SQL Server zkompiloval a optimalizoval váš kód SQL při každém spuštění.
  • Snížený provoz v síti:Pokud na svůj SQL Server posíláte mnoho řádků kódu SQL přes síť, bude to mít dopad na výkon sítě. To platí zejména v případě, že máte stovky řádků kódu SQL a/nebo máte ve své aplikaci mnoho aktivit. Spuštění kódu na SQL Server (jako uložená procedura) eliminuje potřebu posílat tento kód přes síť. Jediným síťovým provozem budou dodané parametry a výsledky jakéhokoli dotazu.
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.

  1. 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
  2. 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.

  3. 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.

  1. 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
  2. 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";

  1. Minimální protokolování s INSERT…SELECT a Fast Load Context

  2. SQL Pivot s více sloupci

  3. Jak vytvořit bezpečný příkaz připravený mysql v php?

  4. Více volání array_agg() v jednom dotazu