Executar um procedimento armazenado

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System)

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

Há maneiras diferentes de executar um procedimento armazenado. A primeira e mais comum abordagem é fazer com 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 for iniciada.

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

Limitações e restrições

A ordenação de banco de dados de chamada é usada durante a correspondência de nomes dos procedimentos do sistema. Por esse motivo, sempre use exatamente as maiúsculas e minúsculas encontradas nos nomes de procedimento do sistema em chamadas de procedimento. Por exemplo, este código falhará se for executado no contexto de um banco de dados que tenha uma ordenação com diferenciação de maiúsculas e minúsculas:

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

Para exibir os nomes exatos do procedimento do sistema, consulte as exibições de catálogo sys.system_objects e sys.system_parameters.

Se um procedimento definido pelo usuário tiver o mesmo nome de um procedimento de sistema, o procedimento definido pelo usuário talvez nunca seja executado.

Recomendações

Use as recomendações a seguir 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 de qualquer banco de dados sem ter que qualificar totalmente o nome de procedimento. No entanto, é melhor qualificar por esquema todos os nomes dos procedimentos do sistema com o nome do esquema sys para evitar conflitos de nomes. O exemplo a seguir mostra o método recomendado para 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 de procedimento com o nome do esquema. Esta prática melhora um pouco o desempenho, porque o mecanismo do banco de dados não precisa pesquisar vários esquemas. Usar o nome do esquema também impedirá 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 armazenado 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 não qualificado definido pelo usuário for especificado, o mecanismo de banco de dados pesquisará 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 em um lote ou em SQL dinâmico. Se o nome do procedimento não qualificado aparecer no corpo da definição de outro 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 a interface do usuário do SQL Server Management Studio (SSMS) ou o 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 do SQL Server ou do Banco de Dados SQL do Azure, expanda essa instância e expanda Bancos de Dados.

  2. Expanda o banco de dados desejado, expanda Programabilidadee expanda Procedimentos Armazenados.

  3. Clique com o botão direito no procedimento armazenado que deseja executar e selecione Executar procedimento armazenado.

  4. Na caixa de diálogo Executar Procedimento, 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 Passar valor nulo, 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 nenhum parâmetro, bastará selecionar OK.

    O procedimento armazenado é executado, e os resultados são mostrados no painel Resultados.

    Por exemplo, para executar o procedimento armazenado SalesLT.uspGetCustomerCompany do artigo Criar um procedimento armazenado, insira Cannon para o parâmetro @LastName, Chris para o parâmetro @FirstName e selecione OK. O procedimento retorna FirstName Chris, LastName Cannon e CompanyName Outdoor 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 seguinte instrução Transact-SQL executa o uspGetCustomerCompany procedimento armazenado e com Cannon como @LastName valor do parâmetro e Chris como @FirstName valor do parâmetro:

    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

Há várias maneiras de fornecer parâmetros e valores em instruções EXECUTE de procedimento armazenado. Os exemplos a seguir mostram diversas opções diferentes para a instrução EXECUTE.

  • Se você fornecer os valores dos parâmetros na mesma ordem em que foram definidos no procedimento armazenado, não será necessário indicar 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 será necessário especificar os nomes e valores dos parâmetros na mesma ordem em que foram definidos. Por exemplo, qualquer uma das seguintes afirmações é válida:

    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 na inicialização

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 precisam estar no banco de dados master, ser de propriedade de sa e não podem conter parâmetros de entrada ou de saída. Para obter mais informações, veja sp_procoption (Transact-SQL).

Os procedimentos marcados para execução automática são executados na inicialização sempre que o SQL Server é iniciado e o banco de dados master é recuperado durante esse processo de inicialização. A configuração dos procedimentos para execução automática 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 da execução automática é fazer com que o procedimento execute tarefas do sistema ou de manutenção no 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 o tempdb for recriado durante a inicialização do SQL Server.

Um procedimento executado automaticamente opera com as mesmas permissões dos membros da função de servidor fixa do sysadmin. Qualquer mensagem de erro gerada pelo procedimento é gravada no log de erros do SQL Server.

Não há limite para o número de procedimentos de inicialização que você pode ter, porém lcada um consome um thread de trabalho durante a execução. Se precisar executar vários procedimentos na inicialização, mas, se não for necessário executá-los em paralelo, torne um procedimento o procedimento de inicialização e faça com que este procedimento chame os demais. Este método usará 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, os conjuntos de resultados não têm para onde ir.

Observação

O Banco de Dados SQL do Azure é projetado para isolar recursos de qualquer dependência no banco de dados master. Como tal, as instruções Transact-SQL que configuram opções no nível do servidor não estão disponíveis no SQL do Azure. Muitas vezes, você pode encontrar alternativas apropriadas de outros serviços do Azure, como trabalhos elásticos ou Automação do Azure.

Definir um procedimento para executar automaticamente na inicialização

Somente o administrador do sistema (sa) pode marcar um procedimento para execução automática.

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

Interromper a execução automática de um procedimento 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. Na janela de consulta, insira o seguinte comando:

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