Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
databáze SQL v Microsoft Fabric
Uložená procedura na SQL Serveru je skupina jednoho nebo více příkazů Transact-SQL nebo odkaz na metodu CLR (Common Runtime Language) rozhraní Microsoft .NET Framework. Procedury se podobají konstruktorům v jiných programovacích jazycích, protože mohou:
Přijměte vstupní parametry a vraťte více hodnot ve formě výstupních parametrů volajícímu programu.
Obsahují programovací příkazy, které provádějí operace v databázi. Mezi tyto příkazy patří volání dalších procedur.
Vrátí hodnotu stavu volajícímu programu, která označuje úspěch nebo selhání (a důvod selhání).
Výhody používání uložených procedur
Následující seznam popisuje některé výhody používání postupů.
Snížený provoz serveru nebo klientské sítě
Příkazy v rámci procedury se provádějí jako jedna dávka kódu. Tento přístup může výrazně snížit síťový provoz mezi serverem a klientem, protože se přes síť odesílá pouze volání pro provedení procedury. Bez zapouzdření kódu poskytnutého postupem by každý jednotlivý řádek kódu musel přes síť.
Silnější zabezpečení
Více uživatelů a klientských programů může provádět operace s podkladovými databázovými objekty prostřednictvím postupu, a to i v případě, že uživatelé a programy nemají k těmto podkladovým objektům přímá oprávnění. Postup řídí, jaké procesy a aktivity se provádějí a chrání základní databázové objekty. Tento přístup eliminuje požadavek na udělení oprávnění na úrovni jednotlivých objektů a zjednodušuje vrstvy zabezpečení.
Klauzule EXECUTE AS je možné zadat v CREATE PROCEDURE příkazu, aby bylo možné zosobnění jiného uživatele, nebo povolit uživatelům nebo aplikacím provádět určité databázové aktivity bez nutnosti přímých oprávnění k základním objektům a příkazům. Například některé akce, jako TRUNCATE TABLE například nemají udělená oprávnění. Ke spuštění TRUNCATE TABLEmusí mít ALTER uživatel oprávnění k zadané tabulce. Udělení uživatelských ALTER oprávnění k tabulce nemusí být ideální, protože uživatel má v podstatě oprávnění nad rámec možnosti zkrátit tabulku.
TRUNCATE TABLE Zahrnutím příkazu do modulu a určením, že se tento modul spustí jako uživatel, který má oprávnění k úpravě tabulky, můžete rozšířit oprávnění pro zkrácení tabulky na uživatele, kterému udělíte EXECUTE oprávnění k modulu.
Když aplikace volá proceduru přes síť, zobrazí se pouze volání ke spuštění procedury. Uživatelé se zlými úmysly proto nemůžou zobrazit názvy objektů tabulky a databáze, vložit Transact-SQL vlastní příkazy nebo hledat důležitá data.
Použití parametrů procedury pomáhá chránit před útoky prostřednictvím injektáže SQL. Vzhledem k tomu, že vstup parametru je považován za hodnotu literálu a ne jako spustitelný kód, je pro útočníka obtížnější vložit příkaz do příkazů Transact-SQL uvnitř procedury a ohrozit zabezpečení.
Můžete zašifrovat procedury, které pomůžou obfuscaci zdrojového kódu. Další informace najdete v tématu Šifrování SQL Serveru.
Opakované použití kódu
Kód jakékoli opakované databázové operace je ideální kandidát na zapouzdření v procedurách. Tento přístup eliminuje zbytečné přepisování stejného kódu, snižuje konzistenci kódu a umožňuje všem uživatelům nebo aplikacím s potřebnými oprávněními přistupovat k kódu a spouštět ho.
Jednodušší údržba
Když klientské aplikace volají procedury a udržují databázové operace v datové vrstvě, stačí aktualizovat postupy pouze pro všechny změny v podkladové databázi. Aplikační vrstva zůstává oddělená a nemusí vědět o žádných změnách rozložení databáze, relací nebo procesů.
Vylepšený výkon
Ve výchozím nastavení se procedura zkompiluje při prvním spuštění a vytvoří plán provádění, který znovu použije pro následné spuštění. Vzhledem k tomu, že procesor dotazů nemusí vytvořit nový plán, obvykle zpracování procedury trvá kratší dobu.
Pokud jsou v tabulkách nebo datech odkazovaných postupem významné změny, může předkompilovaný plán skutečně způsobit pomalejší provádění postupu. V tomto případě může rekompiace postupu a vynucení nového plánu provádění zlepšit výkon.
Typy uložených procedur
User-defined
Uživatelem definovaný postup lze vytvořit v uživatelsky definované databázi nebo ve všech systémových databázích s výjimkou Resource databáze. Postup lze vyvíjet buď v jazyce Transact-SQL, nebo jako odkaz na metodu CLR (Common Runtime Language) rozhraní .NET Framework.
Temporary
Dočasné procedury jsou formou uživatelem definovaných procedur. Dočasné procedury jsou jako trvalá procedura, s tím rozdílem, že jsou uloženy v tempdb. Existují dva typy dočasných postupů: místní a globální. Liší se od sebe v jejich jménech, jejich viditelnosti a dostupnosti. Místní dočasné postupy mají znak jednoho čísla (#) jako první znak jejich jmen. Jsou viditelné jenom pro aktuální připojení uživatele a po zavření připojení se odstraní. Globální dočasné postupy mají dva znaky číslic (##) jako první dva znaky jejich názvů. Po vytvoření se zobrazí všem uživatelům a odstraní se na konci poslední relace podle postupu.
System
Systémové postupy jsou součástí databázového stroje. Fyzicky se ukládají do interní, skryté Resource databáze a logicky se zobrazují ve sys schématu každé databáze definované systémem a uživatelem definované databáze. Databáze msdb navíc obsahuje systémové uložené procedury ve schématu dbo , které se používají pro plánování výstrah a úloh. Vzhledem k tomu, že systémové procedury začínají předponou , nepoužívejte tuto předponu sp_při pojmenování uživatelsky definovaných procedur. Úplný seznam systémových procedur naleznete v části Systémové uložené procedury.
SQL Server podporuje systémové postupy, které poskytují rozhraní z SQL Serveru do externích programů pro různé aktivity údržby. Tyto rozšířené postupy používají předponu xp_ . Úplný seznam rozšířených procedur naleznete v tématu Obecné rozšířené uložené procedury.
Uživatelsky definované rozšíření
Rozšířené postupy umožňují vytvářet externí rutiny v programovacím jazyce, jako je C. Tyto postupy jsou knihovny DLL, které instance SQL Serveru může dynamicky načítat a spouštět.
Note
Rozšířené uložené procedury budou odebrány v budoucí verzi SQL Serveru. Tuto funkci nepoužívejte v nové vývojové práci a upravte aplikace, které tuto funkci aktuálně používají co nejdříve. Místo toho vytvořte procedury CLR. Tato metoda poskytuje robustnější a bezpečnější alternativu k psaní rozšířených postupů.
Související úkoly
| Popis úkolu | Article |
|---|---|
| Popisuje, jak vytvořit uloženou proceduru. | Vytvoření uložené procedury |
| Popisuje, jak upravit uloženou proceduru. | Úprava uložené procedury |
| Popisuje, jak odstranit uloženou proceduru. | Odstranění uložené procedury |
| Popisuje, jak spustit uloženou proceduru. | Spuštění uložené procedury |
| Popisuje, jak udělit oprávnění k uložené proceduře. | Udělení oprávnění k uložené proceduře |
| Popisuje, jak vrátit data z uložené procedury do aplikace. | Vrácení dat z uložené procedury |
| Popisuje, jak rekompilovat uloženou proceduru. | Znovu zkompilovat uloženou proceduru |
| Popisuje, jak přejmenovat uloženou proceduru. | Přejmenování uložené procedury |
| Popisuje, jak zobrazit definici uložené procedury. | Zobrazení definice uložené procedury |
| Popisuje, jak zobrazit závislosti uložené procedury. | Zobrazení závislostí uložené procedury |
| Popisuje, jak se parametry používají v uložené proceduře. | Parameters |