Partilhar via


Procedimentos armazenados (Mecanismo de Banco de Dados)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Base de dados SQL no Microsoft Fabric

Um procedimento armazenado no SQL Server é um grupo de uma ou mais instruções Transact-SQL ou uma referência a um método CLR (Common Runtime Language) do Microsoft .NET Framework. Os procedimentos assemelham-se a construções em outras linguagens de programação porque podem:

  • Aceite parâmetros de entrada e retorne vários valores na forma de parâmetros de saída para o programa chamador.

  • Contêm instruções de programação que executam operações no banco de dados. Estas declarações incluem chamar outros procedimentos.

  • Retorne um valor de status para um programa de chamada para indicar sucesso ou falha (e o motivo da falha).

Benefícios do uso de procedimentos armazenados

A lista a seguir descreve alguns benefícios do uso de procedimentos.

Tráfego de rede de servidor/cliente reduzido

Os comandos em um procedimento são executados como um único lote de código. Esta abordagem pode reduzir significativamente o tráfego de rede entre o servidor e o cliente porque apenas a chamada para executar o procedimento é enviada através da rede. Sem o encapsulamento de código fornecido por um procedimento, cada linha de código individual teria que atravessar a rede.

Segurança reforçada

Vários usuários e programas cliente podem executar operações em objetos de banco de dados subjacentes por meio de um procedimento, mesmo que os usuários e programas não tenham permissões diretas nesses objetos subjacentes. O procedimento controla quais processos e atividades são executados e protege os objetos de banco de dados subjacentes. Esta abordagem elimina a necessidade de conceder permissões ao nível do objeto individual e simplifica as camadas de segurança.

A cláusula EXECUTE AS pode ser especificada na CREATE PROCEDURE instrução para permitir a representação de outro usuário ou permitir que usuários ou aplicativos executem determinadas atividades de banco de dados sem precisar de permissões diretas nos objetos e comandos subjacentes. Por exemplo, algumas ações, como TRUNCATE TABLE, não têm permissões que podem ser concedidas. Para o executar TRUNCATE TABLE, o utilizador deve ter ALTER permissões na tabela especificada. Conceder permissões a um usuário ALTER em uma tabela pode não ser o ideal, porque o usuário efetivamente tem permissões muito além da capacidade de truncar uma tabela. Incorporando a instrução num módulo e especificando que o módulo TRUNCATE TABLE seja executado como um utilizador que tem permissões para modificar a tabela, pode estender as permissões para truncar a tabela ao utilizador a quem concede permissões EXECUTE no módulo.

Quando um aplicativo chama um procedimento pela rede, somente a chamada para executar o procedimento é visível. Portanto, os usuários mal-intencionados não podem ver nomes de objetos de tabela e banco de dados, incorporar suas próprias instruções de Transact-SQL ou pesquisar dados críticos.

O uso de parâmetros de procedimento ajuda a proteger contra ataques de injeção de SQL. Como a entrada de parâmetros é tratada como um valor literal e não como código executável, é mais difícil para um invasor inserir um comando nas instruções Transact-SQL dentro do procedimento e comprometer a segurança.

Pode encriptar procedimentos para ajudar a ofuscar o código-fonte. Para obter mais informações, consulte Criptografia do SQL Server.

Reutilização do código

O código para qualquer operação repetitiva de base de dados é um candidato perfeito para encapsulamento em procedimentos. Esta abordagem elimina reescritas desnecessárias do mesmo código, diminui a inconsistência do código e permite que qualquer utilizador ou aplicação com as permissões necessárias aceda e execute o código.

Manutenção mais fácil

Quando as aplicações cliente chamam procedimentos e mantêm as operações da base de dados na camada de dados, basta atualizar os procedimentos para quaisquer alterações na base de dados subjacente. A camada de aplicação mantém-se separada e não precisa de saber de alterações nos layouts, relações ou processos da base de dados.

Desempenho melhorado

Por defeito, um procedimento compila na primeira execução e cria um plano de execução que reutiliza para execuções subsequentes. Como o processador de consultas não precisa criar um novo plano, normalmente leva menos tempo para processar o procedimento.

Se houver alterações significativas nas tabelas ou dados referenciados pelo procedimento, o plano pré-compilado pode realmente fazer com que o procedimento seja executado mais lentamente. Nesse caso, recompilar o procedimento e forçar um novo plano de execução pode melhorar o desempenho.

Tipos de procedimentos armazenados

User-defined

Um procedimento definido pelo usuário pode ser criado em um banco de dados definido pelo usuário ou em todos os bancos de dados do sistema, exceto o Resource banco de dados. O procedimento pode ser desenvolvido tanto em Transact-SQL, quer como referência a um método de linguagem de execução comum (CLR) do .NET Framework.

Temporary

Os procedimentos temporários são uma forma de procedimentos definidos pelo utilizador. Os procedimentos temporários são como um procedimento permanente, exceto que eles são armazenados no tempdb. Existem dois tipos de procedimentos temporários: locais e globais. Eles diferem uns dos outros em seus nomes, sua visibilidade e sua disponibilidade. Os procedimentos temporários locais têm um único símbolo numérico (#) como primeiro carácter dos seus nomes. São visíveis apenas para a ligação do utilizador atual e são eliminadas quando a ligação é fechada. Os procedimentos temporários globais têm dois signos numéricos (##) como os dois primeiros caracteres dos seus nomes. São visíveis para qualquer utilizador após serem criados e são eliminados no final da última sessão usando o procedimento.

System

Os procedimentos do sistema estão incluídos no Mecanismo de Banco de Dados. Estão fisicamente armazenados na base de dados interna e oculta Resource e aparecem logicamente no sys esquema de todas as bases de dados definidas pelo sistema e pelo utilizador. Além disso, o msdb banco de dados também contém procedimentos armazenados no esquema dbo do sistema, que são usados para agendar alertas e tarefas. Como os procedimentos do sistema começam com o prefixo sp_, não use este prefixo ao nomear os procedimentos definidos pelo utilizador. Para uma lista completa de procedimentos do sistema, veja Procedimentos armazenados do Sistema.

O SQL Server dá suporte aos procedimentos do sistema que fornecem uma interface do SQL Server para programas externos para várias atividades de manutenção. Esses procedimentos estendidos usam o prefixo xp_ . Para uma lista completa de procedimentos estendidos, veja Procedimentos armazenados Gerais Estendidos.

Definido pelo utilizador estendido

Procedimentos estendidos permitem a criação de rotinas externas em uma linguagem de programação como C. Esses procedimentos são DLLs que uma instância do SQL Server pode carregar e executar dinamicamente.

Note

Os procedimentos armazenados estendidos serão removidos em uma versão futura do SQL Server. Não use esse recurso em novos trabalhos de desenvolvimento e modifique os aplicativos que atualmente usam esse recurso o mais rápido possível. Em vez disso, crie procedimentos CLR. Este método fornece uma alternativa mais robusta e segura à escrita de procedimentos alargados.

Descrição da tarefa Article
Descreve como criar um procedimento armazenado. Criar um procedimento armazenado
Descreve como modificar um procedimento armazenado. Modificar um procedimento armazenado
Descreve como excluir um procedimento armazenado. Excluir um procedimento armazenado
Descreve como executar um procedimento armazenado. Executar um procedimento armazenado
Descreve como conceder permissões em um procedimento armazenado. Conceder permissões em um procedimento armazenado
Descreve como retornar dados de um procedimento armazenado para um aplicativo. Retornar dados de um procedimento armazenado
Descreve como recompilar um procedimento armazenado. Recompilar um procedimento armazenado
Descreve como renomear um procedimento armazenado. Renomear um procedimento armazenado
Descreve como exibir a definição de um procedimento armazenado. Exibir a definição de um procedimento armazenado
Descreve como exibir as dependências em um procedimento armazenado. Exibir as dependências de um procedimento armazenado
Descreve como os parâmetros são usados em um procedimento armazenado. Parameters