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

Criar um procedimento armazenado no SQL Server 2017


Um procedimento armazenado é um grupo de instruções SQL compiladas em uma. Os procedimentos armazenados podem incluir lógica de negócios e outras construções de programação.

No SQL Server, um procedimento armazenado é 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.

Programabilidade


Um procedimento armazenado é mais do que apenas um script longo. É um script que foi salvo no SQL Server especificamente sob os Stored Procedures nó, e pode:
  • Aceite parâmetros de entrada (e retorne vários valores na forma de parâmetros de saída para o programa de chamada).
  • Contém instruções de programação.
  • Retorne um valor de status para um programa de chamada para indicar sucesso ou falha e o motivo de qualquer falha.

Os procedimentos armazenados geralmente contêm lógica de negócios. Por exemplo, um procedimento armazenado pode aceitar parâmetros que são passados ​​para ele e testar esses parâmetros usando IF declarações. Por exemplo, se o parâmetro for um valor, faça isso, se for outro valor, faça aquilo.

Os procedimentos armazenados podem melhorar o desempenho em um aplicativo, porque o procedimento armazenado é analisado e otimizado assim que é criado e, em seguida, armazenado na memória. Executar uma consulta condicional via procedimento armazenado pode ser extremamente rápido - comparado a um aplicativo que envia uma consulta pela rede para o SQL Server e, em seguida, tem todos os dados retornados pela rede para que possa filtrar e selecionar apenas os registros nos quais está interessado.

Benefícios dos Procedimentos Armazenados


Aqui estão alguns dos principais benefícios do uso de procedimentos armazenados:
Benefício Explicação
Programação modular Você pode escrever um procedimento armazenado uma vez e chamá-lo várias vezes, de diferentes partes de um aplicativo (e até mesmo de vários aplicativos).
Desempenho Os procedimentos armazenados fornecem execução de código mais rápida e reduzem o tráfego de rede.
  • Execução mais rápida:os procedimentos armazenados são analisados ​​e otimizados assim que são criados e o procedimento armazenado é armazenado na memória. Isso significa que ele será executado muito mais rápido do que enviar muitas linhas de código SQL do seu aplicativo para o SQL Server. Fazer isso requer que o SQL Server compile e otimize seu código SQL toda vez que ele for executado.
  • Tráfego de rede reduzido:se você enviar muitas linhas de código SQL pela rede para o SQL Server, isso afetará o desempenho da rede. Isso é especialmente verdadeiro se você tiver centenas de linhas de código SQL e/ou tiver muita atividade em seu aplicativo. A execução do código no SQL Server (como um procedimento armazenado) elimina a necessidade de enviar esse código pela rede. O único tráfego de rede serão os parâmetros fornecidos e os resultados de qualquer consulta.
Segurança Os usuários podem executar um procedimento armazenado sem precisar executar nenhuma das instruções diretamente. Portanto, um procedimento armazenado pode fornecer funcionalidade avançada de banco de dados para usuários que normalmente não teriam acesso a essas tarefas, mas essa funcionalidade é disponibilizada de maneira rigidamente controlada.

Como criar um procedimento armazenado


Para criar um procedimento armazenado, use o CREATE PROCEDURE instrução, seguida pelo código que compõe o procedimento armazenado. Se o seu procedimento armazenado for aceitar parâmetros, eles precisam ser incluídos após o nome.
CREATE PROCEDURE myStoredProcedure AS
...

OR

CREATE PROCEDURE myStoredProcedure @ParameterName DataType AS
...

Exemplo


Aqui está um exemplo de como criar um procedimento armazenado e, em seguida, executar esse procedimento armazenado.
  1. Criar o procedimento armazenado


    Execute a instrução a seguir no banco de dados Music que criamos ao longo deste tutorial.

    Este exemplo cria um procedimento armazenado chamado AlbumsFromArtist. Ele seleciona todos os álbuns de um artista especificado quando o procedimento armazenado é executado.
    CREATE PROCEDURE spAlbumsFromArtist 
    	@ArtistName varchar(255)
    AS
    	SELECT AlbumName, ReleaseDate
    	FROM Albums
    		INNER JOIN Artists
    		ON Albums.ArtistId = Artists.ArtistId 
    	WHERE Artists.ArtistName = @ArtistName;
    GO
  2. Visualizar o procedimento armazenado


    Expanda a Programabilidade> Procedimentos armazenados node sob o banco de dados aplicável para ver seu procedimento armazenado recém-criado. Você também pode expandir os Parâmetros do procedimento armazenado node para ver os parâmetros que você precisa passar ao executá-lo.
  3. Executar o procedimento armazenado


    Agora que o procedimento armazenado foi criado, você pode executá-lo usando um EXECUTE declaração e passando quaisquer parâmetros necessários.

    Em nosso exemplo, precisamos passar o nome do artista.
    EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";

    Como alternativa, você pode omitir o nome do parâmetro ao passar parâmetros. Assim:
    EXECUTE spAlbumsFromArtist "Devin Townsend";

Alterar um procedimento armazenado


Você pode modificar seu procedimento armazenado com o ALTER PROCEDURE demonstração. Assim como quando você altera uma exibição, você pode alterar um procedimento armazenado simplesmente aplicando a nova definição de procedimento armazenado.
  1. Alterar o procedimento armazenado


    Execute a seguinte instrução. Isso adiciona uma nova coluna aos resultados retornados pelo procedimento armazenado. Também adicionamos aliases aos nomes das colunas.
    ALTER PROCEDURE spAlbumsFromArtist 
    	@ArtistName varchar(255)
    AS
    	SELECT 
            al.AlbumName, 
            al.ReleaseDate, 
            g.Genre
    	FROM Albums al
    		INNER JOIN Artists ar
    		ON al.ArtistId = ar.ArtistId 
    		INNER JOIN Genres g
    		ON g.GenreId = al.GenreId 
    	WHERE ar.ArtistName = @ArtistName;
    GO
  2. Executar o procedimento armazenado


    Agora que adicionamos o Genre coluna para a exibição, o procedimento armazenado agora retorna essa coluna quando a executamos.
    EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";