Especificando o valor padrão para um parâmetro

Você pode criar um procedimento armazenado com parâmetros opcionais especificando um valor padrão para parâmetros opcionais. Quando o procedimento armazenado é executado, o valor padrão é usado se nenhum outro valor foi especificado.

É necessário especificar valores padrão porque um erro de sistema será retornado se um parâmetro não tiver um valor padrão especificado no procedimento armazenado e se o programa de chamada não fornecer um valor para o parâmetro ao executar o procedimento armazenado.

Se não for possível especificar um valor como padrão para o parâmetro, é possível especificar NULL como padrão para um parâmetro, fazendo o procedimento armazenado retornar uma mensagem personalizada se for executado sem um valor para o parâmetro.

ObservaçãoObservação

Se o valor padrão for uma cadeia de caracteres contendo pontuação ou espaços em branco incorporados ou caso comece com um número (por exemplo, 6xxx), deve ser incluído entre aspas simples.

Exemplos

O exemplo a seguir cria o procedimento armazenado usp_GetSalesYTD com um parâmetro de entrada, @SalesPerson. NULL será atribuído como valor padrão para o parâmetro e será utilizado em instruções de tratamento de erros para retornar uma mensagem de erro personalizada nos casos de execução do procedimento sem um valor para o parâmetro @SalesPerson.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID('Sales.uspGetSalesYTD', 'P') IS NOT NULL
    DROP PROCEDURE Sales.uspGetSalesYTD;
GO
CREATE PROCEDURE Sales.uspGetSalesYTD
@SalesPerson nvarchar(50) = NULL  -- NULL default value
AS 
    SET NOCOUNT ON; 

-- Validate the @SalesPerson parameter.
IF @SalesPerson IS NULL
BEGIN
   PRINT 'ERROR: You must specify the last name of the sales person.'
   RETURN
END
-- Get the sales for the specified sales person and 
-- assign it to the output parameter.
SELECT SalesYTD
FROM Sales.SalesPerson AS sp
JOIN HumanResources.vEmployee AS e ON e.BusinessEntityID = sp.BusinessEntityID
WHERE LastName = @SalesPerson;
RETURN
GO

O exemplo a seguir executa o procedimento armazenado. A primeira instrução executa o procedimento armazenado sem especificar um valor de entrada, o que faz as instruções de tratamento de erros no procedimento armazenado retornarem a mensagem de erro personalizada. A segunda instrução fornece um valor de entrada e retorna o conjunto de resultados esperado.

-- Run the stored procedure without specifying an input value.
EXEC Sales.usp_GetSalesYTD;
GO
-- Run the stored procedure with an input value.
EXEC Sales.usp_GetSalesYTD N'Blythe';
GO

O exemplo a seguir demonstra o procedimento my_proc com valores padrão para cada um dos três parâmetros **@first**, **@second** e **@third** e os valores exibidos na execução do procedimento armazenado com outros valores de parâmetros:

IF OBJECT_ID('dbo.my_proc', 'P') IS NOT NULL
    DROP PROCEDURE dbo.my_proc;
GO
CREATE PROCEDURE dbo.my_proc
    @first int = NULL,  -- NULL default value
    @second int = 2,    -- Default value of 2
    @third int = 3      -- Default value of 3
AS 
    SET NOCOUNT ON;
    SELECT @first, @second, @third;
GO
EXECUTE dbo.my_proc; -- No parameters supplied
GO

Aqui está o conjunto de resultados.

NULL  2  3

EXECUTE dbo.my_proc 10, 20, 30;-- All parameters supplied
GO

Aqui está o conjunto de resultados.

10  20  30

EXECUTE dbo.my_proc @second = 500;  -- Only second parameter supplied by name
GO

Aqui está o conjunto de resultados.

NULL  500  3

EXECUTE dbo.my_proc 40, @third = 50 -- Only first and third parameters
                                    -- are supplied.

Aqui está o conjunto de resultados.

40  2  50