Compartir a través de


Especificar un valor de parámetro predeterminado

Puede crear un procedimiento almacenado con parámetros opcionales especificando un valor predeterminado para los mismos. Al ejecutar el procedimiento almacenado, se utilizará el valor predeterminado si no se ha especificado ningún otro.

Es necesario especificar valores predeterminados, ya que el sistema devuelve un error si en el procedimiento almacenado no se especifica un valor predeterminado para un parámetro y el programa que realiza la llamada no proporciona ningún otro valor al ejecutar el procedimiento.

Si no se puede especificar ningún valor predeterminado para el parámetro, siempre se puede especificar NULL y dejar que el procedimiento almacenado devuelva un mensaje personalizado en caso de ejecutarse sin que el parámetro tenga un valor.

[!NOTA]

Si el valor predeterminado es una cadena de caracteres con signos de puntuación o espacios en blanco incrustados, o bien si empieza por un número (por ejemplo, 6xxx), deberá estar delimitado por comillas simples y rectas.

Ejemplos

En el ejemplo siguiente se crea el procedimiento usp_GetSalesYTD con un parámetro de entrada, @SalesPerson. NULL se asigna como valor predeterminado para el parámetro y se utiliza en las instrucciones de control de errores para devolver un mensaje de error personalizado en los casos en que se ejecute el procedimiento almacenado sin que el parámetro @SalesPerson tenga un valor.

USE AdventureWorks;
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.EmployeeID = sp.SalesPersonID
WHERE LastName = @SalesPerson;
RETURN
GO

En el ejemplo siguiente se ejecuta el procedimiento almacenado. La primera instrucción ejecuta el procedimiento almacenado sin especificar ningún valor de entrada. Esto hace que las instrucciones de control de errores del procedimiento almacenado devuelvan el mensaje de error personalizado. La segunda instrucción proporciona un valor de entrada y devuelve el 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

En el ejemplo siguiente se muestra el procedimiento my_proc con valores predeterminados para los tres parámetros @first, @second y @third, así como los valores que se obtienen al ejecutar el procedimiento almacenado con otros valores de parámetro:

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

Éste es el conjunto de resultados.

NULL  2  3

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

Éste es el conjunto de resultados.

10  20  30

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

Éste es el conjunto de resultados.

NULL  500  3

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

Éste es el conjunto de resultados.

40  2  50