Sdílet prostřednictvím


Uložené procedury (databázový stroj)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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ů.

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