Sdílet prostřednictvím


Provedení uložené procedury

Platí na:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický 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í:

  1. Schéma sys aktuální databáze.

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

  3. Schéma dbo v 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

  1. V Průzkumníku objektů se připojte k instanci SQL Serveru nebo Azure SQL Database, rozbalte tuto instanci a potom rozbalte Databáze.

  2. Rozbalte požadovanou databázi, rozbalte položku Programovatelnost a potom rozbalte uložené procedury.

  3. Klikněte pravým tlačítkem myši na uloženou proceduru, kterou chcete spustit, a vyberte Spustit uloženou proceduru.

  4. 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.
  5. 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.uspGetCustomerCompany z č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 a CompanyNameVenkovní sportovní zboží.

Použití Transact-SQL v okně dotazu

  1. V nástroji SSMS se připojte k instanci SQL Serveru nebo Azure SQL Database.

  2. Na panelu nástrojů vyberte Nový dotaz.

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

    Například následující příkaz Transact-SQL spustí uloženou proceduru uspGetCustomerCompany a jako Cannon hodnotu parametru @LastName a Chris jako hodnotu parametru @FirstName :

    EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
    GO  
    
  4. Na 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=value vzoru 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=value formulář pro libovolný parametr, musíte ho použít pro všechny další parametry v daném příkazu. Například nemůžete použít EXEC 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).

  1. V nástroji SSMS se připojte k databázovému stroji.

  2. Na panelu nástrojů Standardní vyberte Nový dotaz.

  3. 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';
    GO
    
  4. Na 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.

  1. V nástroji SSMS se připojte k databázovému stroji.

  2. Na panelu nástrojů Standardní vyberte Nový dotaz.

  3. Do okna dotazu zadejte následující příkazy.

    EXEC sp_procoption @ProcName = N'<stored procedure name>'      
        , @OptionName = 'startup'
        , @OptionValue = 'off';
    GO
    
  4. Na panelu nástrojů vyberte Spustit.