O Microsoft SQL Server fornece o mecanismo de procedimento armazenado para simplificar o processo de desenvolvimento do banco de dados, agrupando as instruções Transact-SQL em blocos gerenciáveis. Os procedimentos armazenados são apreciados pela maioria dos desenvolvedores do SQL Server, que acham que os benefícios de eficiência e segurança que obtêm valem bem o investimento inicial no tempo.
Benefícios do Uso de Procedimentos Armazenados
Por que um desenvolvedor deve usar procedimentos armazenados?
Aqui estão os principais benefícios desta tecnologia:
- Execução pré-compilada: O SQL Server compila cada procedimento armazenado uma vez e reutiliza o plano de execução. Isso resulta em um tremendo aumento de desempenho quando os procedimentos armazenados são chamados repetidamente.
- Tráfego reduzido de cliente / servidor: Se a largura de banda da rede for uma preocupação em seu ambiente, você ficará feliz em saber que os procedimentos armazenados podem reduzir as consultas SQL longas a uma única linha transmitida pela rede.
- Reutilização eficiente de código e abstração de programação: Procedimentos armazenados podem ser usados por vários usuários e programas clientes. Se você utilizá-los de maneira planejada, verá que o ciclo de desenvolvimento leva menos tempo.
- Controles de segurança aprimorados: Você pode conceder permissão aos usuários para executar um procedimento armazenado independentemente das permissões da tabela subjacente.
Os procedimentos armazenados são semelhantes às funções definidas pelo usuário, mas existem diferenças sutis.
Estrutura
Os procedimentos armazenados são semelhantes aos construtos vistos em outras linguagens de programação.
Eles aceitam dados na forma de parâmetros de entrada que são especificados no tempo de execução. Esses parâmetros de entrada (se implementados) são utilizados na execução de uma série de instruções que produzem algum resultado. Esse resultado é retornado ao ambiente de chamada por meio do uso de um conjunto de registros, parâmetros de saída e um código de retorno.
Isso pode soar como um bocado, mas você verá que os procedimentos armazenados são realmente muito simples.
Exemplo
Vamos dar uma olhada em um exemplo prático relacionado à tabela chamada inventário mostrada na parte inferior desta página. Essas informações são atualizadas em tempo real e os gerentes de depósito estão constantemente verificando os níveis de produtos armazenados em seu depósito e disponíveis para envio. No passado, cada gerente executava consultas semelhantes às seguintes:
Produto SELECT, QuantidadeFROM InventoryWHERE Warehouse = 'FL'
Isso resultou em desempenho ineficiente no SQL Server. Cada vez que um gerente de warehouse executava a consulta, o servidor de banco de dados era forçado a recompilar a consulta e executá-la do zero. Também exigia que o gerente do warehouse tivesse conhecimento de SQL e permissões apropriadas para acessar as informações da tabela.Em vez disso, o processo pode ser simplificado através do uso de um procedimento armazenado. Aqui está o código para um procedimento chamado sp_GetInventory que recupera os níveis de estoque para um determinado armazém. O gerente do depósito da Flórida pode acessar os níveis de estoque emitindo o comando: O gerente de depósito de Nova York pode usar o mesmo procedimento armazenado para acessar o inventário dessa área: Concedido, este é um exemplo simples, mas os benefícios da abstração podem ser vistos aqui. O gerente do warehouse não precisa entender o SQL ou o funcionamento interno do procedimento. De uma perspectiva de desempenho, o procedimento armazenado faz maravilhas. O SQL Server cria um plano de execução uma vez e, em seguida, o reutiliza conectando os parâmetros apropriados no tempo de execução.Agora que você aprendeu os benefícios dos procedimentos armazenados, vá até lá e use-os. Experimente alguns exemplos e meça as melhorias de desempenho alcançadas - você ficará surpreso! Tabela de InventárioCREATE PROCEDURE sp_GetInventory@location varchar (10)COMOProduto SELECT, QuantidadeFROM InventoryWHERE Warehouse = @location
EXECUTE sp_GetInventory 'FL'
EXECUTE sp_GetInventory 'NY'
identidade produtos Armazém Quantidade 142 Vagem Nova Iorque 100 214 Ervilhas FL 200 825 Milho Nova Iorque 140 512 Feijão Nova Iorque 180 491 Tomates FL 80 379 Melancia FL 85