SQL Server – Executar um Procedimento Armazenado com Parâmetros

Tutorial com exemplos de código T-SQL para executar uma stored procedure no SQL Server com um ou vários parâmetros de entrada.

Dependendo do código SQL Server, para executar procedimento armazenado com parâmetros devem ser fornecidos valores obrigatórios ou serão usados valores padrão. Primeiro, deve-se definir o valor NULL no código da procedure. Isso acontece porque criamos os parâmetros de forma obrigatória ou não obrigatória. Para parâmetros opcionais, podemos atribuir um valor padrão na declaração de criação da procedure no SQL. Assim, parâmetros opcionais não impedem a execução da procedure e a obtenção de um feedback potencial no SSMS.

1. Executar uma stored procedure no SQL Server com um parâmetro

Primeiramente, crie a procedure a ser chamada, ou certifique-se de que o alvo já está no banco de dados. Se não, execute o código abaixo, similar ao usado para criar a procedure uspGetCustomer deste tutorial. Nesta stored procedure, o único parâmetro de entrada é o ID do Cliente, sendo obrigatório. O objetivo da procedure é exibir todas as informações, ou seja, todas as colunas da tabela Clientes para o número de cliente dado como parâmetro. O exemplo da stored procedure com este script:

CREATE PROCEDURE uspGetCustomer
   @NoClient INT
AS
   SELECT  *
   FROM    [dbo].[CLIENTS]
   WHERE   [NOCLIENT] = @NoClient
GO

Aqui está um exemplo simples de como executar uma stored procedure no MS SQL com um ou mais parâmetros como entrada. De fato, para passar as informações de entrada para o código SQL, execute este código e adapte esta sintaxe ao caso de negócio específico:

EXEC dbo.uspGetCustomer
   @NoClient = 1;

2. Executar uma stored procedure com vários parâmetros em T-SQL

Neste segundo caso, o ID do Cliente e a Cidade são usados como parâmetros. Nestes exemplos mais práticos, é claro que é possível usar apenas nomes e valores explícitos em vez de IDs técnicos.

-- Criar a mesma procedure com dois parâmetros e também valores padrão NULL
CREATE PROCEDURE uspGetCustomer
  @ClientNumber  int          = NULL, 
  @City          nvarchar(20) = NULL
AS
  SELECT *
  FROM   [dbo].[CLIENTS]
  WHERE  [ClientNumber] = @ClientNumber
    OR   [City]         = @City
GO

Assim, para executar uma stored procedure codificada no SQL Server, simplesmente chame a procedure, com os parâmetros obrigatórios separados por valores, e na ordem correta, ou nomeados explicitamente, que é a maneira recomendada.

EXEC dbo.uspGetCustomer
   @ClientNumber = 2,
   @City         = 'Casablanca';
 

De fato, no parágrafo anterior menciono o fato de que não é necessário chamar explicitamente os nomes das variáveis, podendo chamá-las desta forma:

EXEC dbo.uspGetCustomer
   2,
   'Casablanca';
 

3. A ordem é importante ao executar stored procedures em T-SQL

Mas neste caso, a ordem deve ser respeitada. Por exemplo, tente executar o código abaixo, ou seja, sem respeitar a ordem.

EXEC dbo.uspGetCustomer
   'Casablanca', 
   2;

Você pode encontrar um erro do SQL Server como este, porque os tipos dos parâmetros não são os mesmos. E se ambos fossem inteiros, poderia ser pior, pois então o resultado seria falso.

Para executar uma stored procedure com parâmetros no SQL Server sem erro: a ordem deve ser respeitada
Para executar uma stored procedure com parâmetros no SQL Server sem erro: a ordem deve ser respeitada

Msg 8114, Level 16, State 1, Procedure dbo.uspGetCustomer, Line 0 [Batch Start Line 0]
Erro ao converter o tipo de dados varchar para int.

Uma sintaxe simples desde que os parâmetros e valores padrão sejam usados

Este é o fim do tutorial sobre como executar um procedimento armazenado com parâmetros usando a programação do SQL Server. Para aprofundar na jornada de aprendizado do SQL Server e T-SQL, este é um breve tutorial sobre como retornar valores com uma stored procedure usando a opção OUTPUT. De fato, stored procedures, ao contrário de funções SQL, nem sempre retornam um valor. Para retornar um valor com uma procedure no MS SQL, use a opção OUTPUT.

Mais conteúdo sobre Stored Procedures SQL

Be the first to comment

Leave a Reply

Your email address will not be published.


*