Partilhar via


Executar um procedimento armazenado

Aplica-se a:Banco de Dados SQL do AzureAzure SQL DatabaseInstância Gerenciada SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)banco de dados SQL no Microsoft Fabric

Este artigo descreve como executar um procedimento armazenado no SQL Server usando o SQL Server Management Studio ou o Transact-SQL.

Há diferentes maneiras de executar um procedimento armazenado. A primeira e mais comum abordagem é que um aplicativo ou usuário chame o procedimento. Outra abordagem é definir o procedimento armazenado para ser executado automaticamente quando uma instância do SQL Server é iniciada.

Quando um procedimento é chamado por um aplicativo ou usuário, a palavra-chave Transact-SQL EXECUTE ou EXEC é explicitamente declarada na chamada. O procedimento pode ser chamado e executado sem a palavra-chave EXEC se o procedimento for a primeira instrução em um lote Transact-SQL.

Limitações e restrições

O agrupamento do banco de dados chamador é usado ao fazer a correspondência de nomes de procedimentos do sistema. Por esse motivo, sempre use a grafia exata dos nomes de procedimentos do sistema em chamadas de procedimento. Por exemplo, esse código falhará se executado no contexto de um banco de dados que tenha um agrupamento que diferencia maiúsculas de minúsculas:

EXEC SP_heLP; -- Fails to resolve because SP_heLP doesn't equal sp_help  

Para mostrar os nomes exatos dos procedimentos do sistema, consulte as vistas de catálogo sys.system_objects e sys.system_parameters.

Se um procedimento definido pelo usuário tiver o mesmo nome de um procedimento do sistema, o procedimento definido pelo usuário pode nunca ser executado.

Recomendações

Use as seguintes recomendações para executar procedimentos armazenados.

Procedimentos armazenados do sistema

Os procedimentos do sistema começam com o prefixo sp_. Como eles aparecem logicamente em todos os bancos de dados definidos pelo usuário e pelo sistema, os procedimentos do sistema podem ser executados a partir de qualquer banco de dados sem a necessidade de qualificar totalmente o nome do procedimento. No entanto, é melhor qualificar todos os nomes de procedimentos do sistema com o nome do esquema sys para evitar conflitos de nomenclatura. O exemplo a seguir mostra o método recomendado de chamar um procedimento do sistema.

EXEC sys.sp_who;  

Procedimentos armazenados definidos pelo usuário

Ao executar um procedimento definido pelo usuário, é melhor qualificar o nome do procedimento com o nome do esquema. Essa prática dá um pequeno aumento de desempenho porque o Mecanismo de Banco de Dados não precisa pesquisar vários esquemas. Usar o nome do esquema também impede a execução do procedimento errado se um banco de dados tiver procedimentos com o mesmo nome em vários esquemas.

Os exemplos a seguir demonstram o método recomendado para executar um procedimento definido pelo usuário. Este procedimento aceita dois parâmetros de entrada. Para obter informações sobre como especificar parâmetros de entrada e saída, consulte Especificar parâmetros em um procedimento armazenado.

EXECUTE SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
GO

Ou:

EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
GO  

Se um procedimento definido pelo usuário não qualificado for especificado, o Mecanismo de Banco de Dados procurará o procedimento na seguinte ordem:

  1. O esquema sys do banco de dados atual.

  2. O esquema padrão do chamador se o procedimento for executado num lote ou em SQL dinâmico. Se o nome do procedimento não qualificado aparecer dentro do corpo de outra definição de procedimento, o esquema que contém esse outro procedimento será pesquisado em seguida.

  3. O esquema dbo no banco de dados atual.

Segurança

Para obter informações de segurança, consulte EXECUTE AS (Transact-SQL) e Cláusula EXECUTE AS (Transact-SQL).

Permissões

Para obter informações sobre permissões, consulte permissões em EXECUTE (Transact-SQL).

Execução de procedimento armazenado

Você pode usar o SQL Server Management Studio (SSMS) interface do usuário ou Transact-SQL em uma janela de consulta do SSMS para executar um procedimento armazenado. Use sempre a versão mais recente do SSMS.

Usar o SQL Server Management Studio

  1. No Pesquisador de Objetos , conecte-se a uma instância de SQL Server ou Azure SQL Database, expanda essa instância e depois expanda Bancos de Dados.

  2. Expanda a base de dados que pretende, expanda Programabilidade, e, em seguida, expanda Procedimentos Armazenados.

  3. Clique com o botão direito do rato no procedimento armazenado que pretende executar e selecione Executar Procedimento Armazenado.

  4. Na caixa de diálogo Procedimento de Execução, Parâmetro indica o nome de cada parâmetro, Tipo de Dados indica seu tipo de dados e Parâmetro de Saída indica se é um parâmetro de saída.

    Para cada parâmetro:

    • Em Valor, digite o valor a ser usado para o parâmetro.
    • Em Pass Null Value, selecione se deseja passar um NULL como o valor do parâmetro.
  5. Selecione OK para executar o procedimento armazenado. Se o procedimento armazenado não tiver parâmetros, basta selecionar OK.

    O procedimento armazenado é executado, e os resultados aparecem no painel Resultados do.

    Por exemplo, para executar o SalesLT.uspGetCustomerCompany procedimento armazenado a partir do artigo Criar um procedimento armazenado, digite Cannon para o parâmetro @LastName e Chris para o parâmetro @FirstName e selecione OK. O procedimento retorna FirstNameChris, LastNameCannon, e CompanyNameOutdoor Sporting Goods.

Usar Transact-SQL em uma janela de consulta

  1. No SSMS, conecte-se a uma instância do SQL Server ou do Banco de Dados SQL do Azure.

  2. Na barra de ferramentas, selecione Nova Consulta.

  3. Insira uma instrução EXECUTE com a seguinte sintaxe na janela de consulta, fornecendo valores para todos os parâmetros esperados:

    EXECUTE <ProcedureName> N'<Parameter 1 value>, N'<Parameter x value>;  
    GO  
    

    Por exemplo, a instrução Transact-SQL a seguir executa o procedimento armazenado uspGetCustomerCompany e com Cannon como o valor do parâmetro @LastName e Chris como o valor do parâmetro @FirstName:

    EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
    GO  
    
  4. Na barra de ferramentas, selecione Executar. O procedimento armazenado é executado.

Opções para valores de parâmetros

Existem várias maneiras de fornecer parâmetros e valores nas instruções EXECUTE de procedimentos armazenados. Os exemplos a seguir mostram várias opções diferentes para a instrução EXECUTE.

  • Se você fornecer os valores de parâmetro na mesma ordem em que são definidos no procedimento armazenado, não precisará declarar os nomes dos parâmetros. Por exemplo:

    EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
    
  • Se você fornecer nomes de parâmetros no padrão @parameter_name=value, não precisará especificar os nomes e valores dos parâmetros na mesma ordem em que são definidos. Por exemplo, qualquer uma das duas instruções seguintes são válidas:

    EXEC SalesLT.uspGetCustomerCompany @FirstName = N'Chris', @LastName = N'Cannon';
    

    ou:

    EXEC SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
    
  • Se você usar o formulário @parameter_name=value para qualquer parâmetro, deverá usá-lo para todos os parâmetros subsequentes nessa instrução. Por exemplo, você não pode usar EXEC SalesLT.uspGetCustomerCompany1 @FirstName = N'Chris', N'Cannon';.

Execução automática no arranque

Aplica-se a: SQL Server

No SQL Server, um membro da função de servidor sysadmin pode usar sp_procoption para definir ou limpar um procedimento para execução automática na inicialização. Os procedimentos de inicialização devem estar no banco de dados master, devem ser de propriedade sae não podem ter parâmetros de entrada ou saída. Para obter mais informações, consulte sp_procoption (Transact-SQL).

Os procedimentos marcados para execução automática na inicialização são executados sempre que o SQL Server é iniciado e o banco de dados master é recuperado durante esse processo de inicialização. Configurar procedimentos para executar automaticamente pode ser útil para executar operações de manutenção de banco de dados ou para que os procedimentos sejam executados continuamente como processos em segundo plano.

Outro uso para a execução automática é fazer com que o procedimento execute tarefas de sistema ou manutenção em tempdb, como a criação de uma tabela temporária global. A execução automática garante que essa tabela temporária sempre exista quando tempdb é recriada durante a inicialização do SQL Server.

Um procedimento executado automaticamente opera com as mesmas permissões que os membros da função de servidor fixa sysadmin. Todas as mensagens de erro geradas pelo procedimento gravam no log de erros do SQL Server.

Não há limite para o número de procedimentos de inicialização que você pode ter, mas cada procedimento de inicialização consome um thread de trabalho durante a execução. Se você precisar executar vários procedimentos na inicialização, mas não precisar executá-los em paralelo, faça de um procedimento o procedimento de inicialização e faça com que esse procedimento chame os outros procedimentos. Esse método usa apenas um thread de trabalho.

Dica

Não retorne nenhum conjunto de resultados de um procedimento executado automaticamente. Como o procedimento está sendo executado pelo SQL Server em vez de um aplicativo ou usuário, não há para onde ir os conjuntos de resultados.

Observação

O Banco de Dados SQL do Azure foi projetado para isolar recursos de dependências no banco de dados master. Como tal, Transact-SQL instruções que configuram opções no nível do servidor não estão disponíveis no Azure SQL. Muitas vezes, você pode encontrar alternativas apropriadas de outros serviços do Azure, como Elastic jobs ou Azure Automation.

Definir um procedimento para executar automaticamente na inicialização

Somente o administrador do sistema (sa) pode marcar um procedimento para executar automaticamente.

  1. No SSMS, conecte-se ao Mecanismo de Banco de Dados.

  2. Na barra de ferramentas Padrão, selecione Nova Consulta.

  3. Insira os seguintes comandos sp_procoption para definir um procedimento armazenado para ser executado automaticamente na inicialização do SQL Server.

    EXEC sp_procoption @ProcName = N'<stored procedure name>'   
        , @OptionName = 'startup'   
        , @OptionValue = 'on';
    GO
    
  4. Na barra de ferramentas, selecione Executar.

Impedir que um procedimento seja executado automaticamente na inicialização

Um sysadmin pode usar sp_procoption para impedir que um procedimento seja executado automaticamente na inicialização do SQL Server.

  1. No SSMS, conecte-se ao Mecanismo de Banco de Dados.

  2. Na barra de ferramentas padrão, selecione Nova Consulta.

  3. Insira os seguintes comandos na janela de consulta.

    EXEC sp_procoption @ProcName = N'<stored procedure name>'      
        , @OptionName = 'startup'
        , @OptionValue = 'off';
    GO
    
  4. Na barra de ferramentas, selecione Executar.