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

SQL Server 2016:Vytvořte uloženou proceduru

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

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.

  1. 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()));
  2. 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í).

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

  4. 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í.

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

  2. Parametry dodávky

    Zadejte hodnotu všech parametrů, které uložená procedura vyžaduje, a klikněte na OK .

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


  1. Škálování vaší databáze časových řad – Jak jednoduše škálovat TimescaleDB

  2. Jak deklarovat proměnnou a používat ji ve stejném skriptu Oracle SQL?

  3. Jak získat přístup k internímu indexu pole pomocí postgreSQL?

  4. Sloučení dvou řádků do jednoho při nahrazení hodnot null