Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Banco de dados SQL no Microsoft Fabric
Um procedimento armazenado no SQL Server é um grupo de uma ou mais instruções do Transact-SQL ou uma referência a um método CLR (Common Language Runtime) do Microsoft .NET Framework. Os procedimentos lembram as construções em outras linguagens de programação porque podem:
Aceitar parâmetros de entrada e retornar vários valores no formulário de parâmetros de saída para o programa de chamada.
Conter instruções de programação que executam operações no banco de dados. Essas declarações incluem chamar outros procedimentos.
Retornar um valor de status a um programa de chamada para indicar êxito 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. Essa abordagem pode reduzir significativamente o tráfego de rede entre o servidor e o cliente porque somente a chamada para executar o procedimento é enviada pela rede. Sem o encapsulamento de código fornecido por um procedimento, cada linha individual de código teria de cruzar a rede.
Segurança mais forte
Vários usuários e programas cliente podem executar operações em objetos de banco de dados subjacentes por meio de um procedimento, mesmo se os usuários e programas não tiverem permissões diretas para esses objetos subjacentes. O procedimento controla quais processos e atividades são executados e protege os objetos de banco de dados subjacentes. Essa abordagem elimina o requisito de conceder permissões no nível de objeto individual e simplifica as camadas de segurança.
A cláusula EXECUTE AS pode ser especificada na instrução CREATE PROCEDURE para permitir a representação de outro usuário, ou permitir que usuários ou aplicativos executem certas atividades de bancos 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 concessíveis. Para executar TRUNCATE TABLE, o usuário deve ter permissões ALTER na tabela especificada. A concessão de permissões ALTER a um usuário em uma tabela pode não ser ideal porque o usuário, efetivamente, tem permissões a mais do que a capacidade de truncar uma tabela. Incorporando a instrução TRUNCATE TABLE em um módulo e especificando que o módulo executa como um usuário que tem permissões para modificar a tabela, você pode estender as permissões para truncar a tabela para o usuário ao qual você concedeu permissões EXECUTE no módulo.
Quando um aplicativo chama um procedimento na rede, somente a chamada para executar o procedimento ficará visível. Portanto, usuários mal-intencionados não podem consultar nomes de tabelas e objetos de banco de dados, inserir instruções Transact-SQL próprias nem pesquisar para obter dados críticos.
Usar parâmetros de procedimento ajuda na proteção contra ataques de injeção SQL. Como a entrada de parâmetro é tratada como valor literal e não como código executável, fica mais difícil para um invasor inserir um comando nas instruções Transact-SQL dentro do procedimento e comprometer a segurança.
Você pode criptografar procedimentos para ajudar a ofuscar o código-fonte. Para obter mais informações, veja Criptografia do SQL Server.
Reutilização de código
O código para qualquer operação de banco de dados repetitivo é um candidato perfeito para encapsulamento em procedimentos. Essa abordagem elimina reescritas desnecessárias do mesmo código, diminui a inconsistência de código e permite que qualquer usuário ou aplicativo com as permissões necessárias acessem e executem o código.
Manutenção facilitada
Quando os aplicativos cliente chamam procedimentos e mantêm as operações de banco de dados na camada de dados, você só precisa atualizar os procedimentos para quaisquer alterações no banco de dados subjacente. A camada de aplicativo permanece separada e não precisa saber sobre nenhuma alteração nos layouts, relações ou processos do banco de dados.
Desempenho aprimorado
Por padrão, um procedimento compila a primeira vez que é executado e cria um plano de execução que ele reutiliza para execuções subsequentes. Como o processador de consulta não precisa criar um novo plano, normalmente demora menos tempo para processar o procedimento.
Se houver alterações significantes nas tabelas ou dados referenciados pelo procedimento, o plano pré-compilado poderá, na verdade, fazer com que o procedimento execute mais lentamente. Neste caso, recompilar o procedimento e forçar um novo plano de execução podem melhorar 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 no banco de dados Resource. O procedimento pode ser desenvolvido no Transact-SQL ou como uma referência a um método CLR (Common Runtime Language) do .NET Framework.
Temporary
Procedimentos temporários são uma forma de procedimentos definidos pelo usuário. Os procedimentos temporários são como procedimentos permanentes, a diferença é que eles são armazenados em tempdb. Há dois tipos de procedimentos temporários: local e global. Elas diferem uma da outra pelo nome, visibilidade e disponibilidade. Os procedimentos temporários locais têm um único sinal de número (#) como o primeiro caractere de seus nomes. Eles são visíveis apenas para a conexão de usuário atual e são excluídos quando a conexão é fechada. Os procedimentos temporários globais têm dois sinais numéricos (##) como os dois primeiros caracteres de seus nomes. Eles ficam visíveis para qualquer usuário depois de criados e são excluídos no final da última sessão usando o procedimento.
System
Os procedimentos do sistema são fornecidos com o Mecanismo de Banco de Dados. Eles são armazenados fisicamente no banco de dados interno e oculto Resource e aparecem logicamente no sys esquema de cada banco de dados definido pelo sistema e definido pelo usuário. Além disso, o banco de dados msdb também pode conter procedimentos armazenados do sistema no esquema dbo que são usados para agendar alertas e trabalhos. Como os procedimentos do sistema começam com o prefixo sp_, não use esse prefixo ao nomear procedimentos definidos pelo usuário. Para obter uma lista completa de procedimentos do sistema, consulte procedimentos armazenados do sistema.
O SQL Server dá suporte aos procedimentos do sistema que fornecem uma interface no SQL Server a programas externos para várias atividades de manutenção. Esses procedimentos estendidos usam o prefixo xp_. Para obter uma lista completa de procedimentos estendidos, consulte Procedimentos armazenados estendidos gerais.
Estendido definido pelo usuário
Os procedimentos estendidos permitem criar 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
Procedimentos armazenados estendidos serão removidos em uma versão futura do SQL Server. Não utilize esse recurso em desenvolvimentos novos e modifique, assim que possível, os aplicativos que atualmente o utilizam. Crie procedimentos CLR, então. O método fornece uma alternativa mais robusta e segura para gravar procedimentos estendidos.
Tarefas relacionadas
| 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 definições de um procedimento armazenado. | Exibir a definição de um procedimento armazenado |
| Descreve como exibir as dependências de um procedimento armazenado. | Exibir as dependências de um procedimento armazenado |
| Descreve como os parâmetros são usados em um procedimento armazenado. | Parameters |