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 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
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
El conjunto de resultados es el siguiente.
NULL 2 3
EXECUTE dbo.my_proc 10, 20, 30;-- All parameters supplied
GO
El conjunto de resultados es el siguiente.
10 20 30
EXECUTE dbo.my_proc @second = 500; -- Only second parameter supplied by name
GO
El conjunto de resultados es el siguiente.
NULL 500 3
EXECUTE dbo.my_proc 40, @third = 50 -- Only first and third parameters
-- are supplied.
El conjunto de resultados es el siguiente.
40 2 50
Vea también