Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O que é um procedimento armazenado?


Os procedimentos armazenados são um lote de instruções SQL que podem ser executadas de duas maneiras. A maioria dos principais DBMs suporta procedimentos armazenados; no entanto, nem todos o fazem. Você precisará verificar com sua documentação de ajuda específica do DBMS para obter detalhes. Como estou mais familiarizado com o SQL Server, usarei isso como meus exemplos.

Para criar um procedimento armazenado, a sintaxe é bastante simples:
CREATE PROCEDURE <owner>.<procedure name>

     <Param> <datatype>

AS

     <Body>

Assim, por exemplo:
CREATE PROCEDURE Users_GetUserInfo

    @login nvarchar(30)=null

AS

    SELECT * from [Users]
    WHERE ISNULL(@login,login)=login

Um benefício dos procedimentos armazenados é que você pode centralizar a lógica de acesso a dados em um único local que é fácil para os DBAs otimizarem. Os procedimentos armazenados também têm um benefício de segurança, pois você pode conceder direitos de execução a um procedimento armazenado, mas o usuário não precisará ter permissões de leitura/gravação nas tabelas subjacentes. Este é um bom primeiro passo contra a injeção de SQL.

Os procedimentos armazenados vêm com desvantagens, basicamente a manutenção associada à sua operação básica de CRUD. Digamos que para cada tabela você tenha um Insert, Update, Delete e pelo menos um select baseado na chave primária, ou seja, cada tabela terá 4 procedimentos. Agora pegue um banco de dados de tamanho decente de 400 tabelas e você terá 1600 procedimentos! E isso supondo que você não tenha duplicatas, o que provavelmente terá.

É aqui que usar um ORM ou algum outro método para gerar automaticamente suas operações CRUD básicas tem muito mérito.