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í na:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytický platformový systém (PDW)
SQL databáze v Microsoft Fabric
Tento článek popisuje, jak spustit uloženou proceduru v SQL Serveru pomocí aplikace SQL Server Management Studio nebo Transact-SQL.
Existují různé způsoby, jak spustit uloženou proceduru. Prvním a nejběžnějším přístupem je, že proceduru volá aplikace nebo uživatel. Dalším přístupem je nastavit, aby se uložená procedura spouštěla automaticky při spuštění instance SQL Serveru.
Pokud je procedura volána aplikací nebo uživatelem, Transact-SQL EXECUTE nebo EXEC klíčové slovo je explicitně uvedeno ve volání. Proceduru lze volat a spouštět bez klíčového slova EXEC, pokud je procedura prvním příkazem v Transact-SQL dávce.
Limitations
Při porovnávání názvů systémových procedur se používá kolace volající databáze. Z tohoto důvodu vždy používejte přesný tvar názvů systémových procedur ve voláních procedur. Tento kód například selže, pokud je spuštěn v kontextu databáze, která má kolaci citlivou na velikost písmen.
EXEC SP_heLP; -- Fails to resolve because SP_heLP doesn't equal sp_help
Chcete-li zobrazit přesné názvy systémových procedur, proveďte dotaz na katalogová zobrazení sys.system_objects a sys.system_parameters.
Pokud má uživatelsky definovaná procedura stejný název jako systémová procedura, nemusí se procedura definovaná uživatelem spustit.
Recommendations
Při provádění uložených procedur použijte následující doporučení.
Systémové uložené procedury
Systémové procedury začínají předponou sp_. Vzhledem k tomu, že se logicky zobrazují ve všech databázích definovaných uživatelem a systémem, lze systémové procedury spustit z jakékoli databáze, aniž by bylo nutné plně kvalifikovat název procedury. Je nejlepší kvalifikovat všechny názvy systémových procedur názvem schématu sys, aby se zabránilo konfliktům názvů. Následující příklad ukazuje doporučenou metodu volání systémové procedury.
EXEC sys.sp_who;
Uživatelem definované uložené procedury
Při provádění uživatelem definované procedury je nejlepší kvalifikovat název procedury s názvem schématu. Tento postup poskytuje menší zvýšení výkonu, protože databázový stroj nemusí prohledávat více schémat. Použití názvu schématu také zabraňuje spuštění nesprávného postupu, pokud má databáze procedury se stejným názvem ve více schématech.
Následující příklady ukazují doporučenou metodu spuštění uživatelem definované procedury. Tento postup přijímá dva vstupní parametry. Informace o zadání vstupních a výstupních parametrů naleznete v části Zadání parametrů v uložené proceduře.
EXECUTE SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
GO
Or:
EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
GO
Pokud je zadán nekvalifikovaný uživatelem definovaný postup, databázový stroj vyhledá proceduru v následujícím pořadí:
Schéma
sysaktuální databáze.Výchozí schéma volajícího, pokud se procedura spustí v dávce nebo v dynamickém SQL. Pokud se název nekvalifikované procedury zobrazí v těle jiné definice procedury, schéma, které obsahuje tento jiný postup, bude prohledáno dále.
Schéma
dbov aktuální databázi.
Zabezpečení
Informace o zabezpečení naleznete v tématu EXECUTE AS (Transact-SQL) a EXECUTE AS Clause (Transact-SQL).
Permissions
Informace o oprávněních najdete v tématu Oprávnění v příkazu EXECUTE (Transact-SQL).
Spuštění uložené procedury
K provedení uložené procedury můžete použít SQL Server Management Studio (SSMS) nebo Transact-SQL v okně dotazu SSMS. Nainstalujte nejnovější verzi aplikace SQL Server Management Studio (SSMS).
Použití aplikace SQL Server Management Studio
V Průzkumníku objektů se připojte k instanci SQL Serveru nebo Azure SQL Database, rozbalte tuto instanci a potom rozbalte Databáze.
Rozbalte požadovanou databázi, rozbalte položku Programovatelnost a potom rozbalte uložené procedury.
Klikněte pravým tlačítkem myši na uloženou proceduru, kterou chcete spustit, a vyberte Spustit uloženou proceduru.
V dialogovém okně Spustit proceduruparametr označuje název každého parametru, datový typ označuje jeho datový typ a výstupní parametr označuje, zda se jedná o výstupní parametr.
Pro každý parametr:
- V části Hodnota zadejte hodnotu, kterou chcete pro parametr použít.
- V části Předat hodnotu null vyberte, zda se má předat NULL jako hodnota parametru.
Vyberte OK a spusťte uloženou proceduru. Pokud uložená procedura nemá žádné parametry, stačí vybrat OK.
Uložená procedura se spustí a výsledky se zobrazí v podokně Výsledky .
Pokud chcete například spustit uloženou proceduru
SalesLT.uspGetCustomerCompanyz článku Vytvořit uloženou proceduru , zadejte kanón pro @LastName parametr a Chris pro parametr @FirstName a vyberte OK. Postup vrátíFirstNameChrise,LastNameCannona aCompanyNameVenkovní sportovní zboží.
Použití Transact-SQL v okně dotazu
V nástroji SSMS se připojte k instanci SQL Serveru nebo Azure SQL Database.
Na panelu nástrojů vyberte Nový dotaz.
Do okna dotazu zadejte příkaz EXECUTE s následující syntaxí a zadejte hodnoty pro všechny očekávané parametry:
EXECUTE <ProcedureName> N'<Parameter 1 value>, N'<Parameter x value>; GONapříklad následující příkaz Transact-SQL spustí uloženou proceduru
uspGetCustomerCompanya jakoCannonhodnotu parametru@LastNameaChrisjako hodnotu parametru@FirstName:EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris'; GONa panelu nástrojů vyberte Spustit. Uložená procedura se spouští.
Možnosti pro hodnoty parametrů
V příkazech EXECUTE uložené procedury lze zadat parametry a hodnoty několika způsoby. Následující příklady ukazují několik různých možností příkazu EXECUTE.
Pokud zadáte hodnoty parametrů ve stejném pořadí, v jakém jsou definované v uložené proceduře, nemusíte názvy parametrů zadávat. Například:
EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';Pokud do
@parameter_name=valuevzoru zadáte názvy parametrů, nemusíte zadávat názvy parametrů a hodnoty ve stejném pořadí, v jakém jsou definované. Například platí kterékoliv z následujících výroků:EXEC SalesLT.uspGetCustomerCompany @FirstName = N'Chris', @LastName = N'Cannon';or:
EXEC SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';Pokud použijete
@parameter_name=valueformulář pro libovolný parametr, musíte ho použít pro všechny další parametry v daném příkazu. Například nemůžete použítEXEC SalesLT.uspGetCustomerCompany1 @FirstName = N'Chris', N'Cannon';.
Automatické spouštění při spuštění
platí pro: SQL Server
V SYSTÉMU SQL Server může člen sysadmin role serveru použít sp_procoption k nastavení nebo vymazání postupu automatického spuštění při spuštění. Spouštěcí procedury musí být v master databázi, musí být vlastněné saa nemohou mít vstupní nebo výstupní parametry. Další informace najdete v tématu sp_procoption (Transact-SQL).
Procedury označené pro automatické spuštění se spustí pokaždé, když se spustí SQL Server a master databáze je obnovena během tohoto procesu spuštění. Nastavení procedur, které se mají provést automaticky, může být užitečné pro provádění operací údržby databáze nebo pro průběžné spouštění procedur jako procesů na pozadí.
Dalším použitím automatického spouštění je, aby procedura prováděla úlohy systému nebo údržby, tempdbnapříklad vytvoření globální dočasné tabulky. Automatické spouštění zajišťuje, že taková dočasná tabulka vždy existuje při tempdb opětovném vytvoření během spouštění SQL Serveru.
Automaticky provedená procedura funguje se stejnými oprávněními jako členové sysadmin pevné role serveru. Všechny chybové zprávy vygenerované postupem zapisují do protokolu chyb SQL Serveru.
Počet spouštěcích postupů, které můžete mít, není nijak omezený, ale každý spouštěcí postup při provádění využívá jedno pracovní vlákno. Pokud potřebujete spustit více procedur při spuštění, ale nemusíte je spouštět paralelně, udělejte jednu proceduru startovací a nechte tuto proceduru volat ostatní procedury. Tato metoda používá pouze jedno pracovní vlákno.
Tip
Nevracejte žádné sady výsledků z procedury, která se spouští automaticky. Vzhledem k tomu, že tento postup provádí SQL Server místo aplikace nebo uživatele, neexistuje nikde, kde by se sady výsledků dostaly.
Note
Azure SQL Database je navržený tak, aby izoloval funkce od závislostí v master databázi. Příkazy Transact-SQL, které konfigurují možnosti na úrovni serveru, nejsou v Azure SQL k dispozici. Často můžete najít vhodné alternativy z jiných služeb Azure, jako jsou elastické úlohy nebo Azure Automation.
Nastavení procedury, která se má spustit automaticky při spuštění
Proceduru, která se má spustit automaticky, může označit pouze správce systému (sa).
V nástroji SSMS se připojte k databázovému stroji.
Na panelu nástrojů Standardní vyberte Nový dotaz.
Zadejte následující příkazy sp_procoption , které nastaví uloženou proceduru, která se automaticky spustí při spuštění SQL Serveru.
EXEC sp_procoption @ProcName = N'<stored procedure name>' , @OptionName = 'startup' , @OptionValue = 'on'; GONa panelu nástrojů vyberte Spustit.
Zastavení automatického spuštění procedury
A sysadmin může použít sp_procoption k zastavení automatického spuštění procedury při spuštění SQL Serveru.
V nástroji SSMS se připojte k databázovému stroji.
Na panelu nástrojů Standardní vyberte Nový dotaz.
Do okna dotazu zadejte následující příkazy.
EXEC sp_procoption @ProcName = N'<stored procedure name>' , @OptionName = 'startup' , @OptionValue = 'off'; GONa panelu nástrojů vyberte Spustit.
Související obsah
- Uložené procedury (databázový stroj)
- EXECUTE (Transact-SQL)
- Vytvoření uložené procedury
- CREATE PROCEDURE (Transact-SQL)
- Zadání parametrů v uložené proceduře
- sp_procoption (Transact-SQL)
- Konfigurace serveru: Vyhledání spouštěcích procesů