Función con parámetro opcional (20090209)

09/02/2009 - 13:47 por Mauricio | Informe spam
Hola a todos,
tengo esta función:
ALTER FUNCTION [dbo].[MCS_FN_SellPrice] ( @pProId INT, @pDate DATETIME,
@pSize INT, @pGroupId INT = NULL)
RETURNS money AS
BEGIN
DECLARE @Price AS MONEY
IF @pGroupId IS NULL
SET @pGroupId = (SELECT PGR_ID FROM MCS_PRICEGROUPS WHERE
PGR_CODE = 1)
SET @Price = (SELECT TOP 1 (CASE @pSize
WHEN 1 THEN PRI_SIZE1
WHEN 2 THEN PRI_SIZE2
WHEN 3 THEN PRI_SIZE3
WHEN 4 THEN PRI_SIZE4
WHEN 5 THEN PRI_SIZE5
WHEN 6 THEN PRI_SIZE6
WHEN 7 THEN PRI_SIZE7
WHEN 8 THEN PRI_SIZE8
WHEN 9 THEN PRI_SIZE9
END )
FROM MCS_PRICES WHERE PRI_PGR_ID = @pGroupId AND
PRI_PRD_ID (SELECT PRD_ID FROM MCS_PRICEDATES WHERE PRD_PRO_ID =
@pProId AND
PRD_DATE = (SELECT MAX(PRD_DATE)
FROM MCS_PRICEDATES
WHERE PRD_PRO_ID = @pProId AND PRD_DATE <= @pDate )))
RETURN @Price
END

y quiero que el cuarto parámetro sea opcional. Pensé que así la
estaba definiendo correctamente pero si la llamo con 3 parámetros me
dice que el número de parámetros es insuficiente.
Qué es lo que estoy haciendo mal?
Muchas gracias por vuestra ayuda.

Mauricio
Copenhague, Dinamarca
 

Leer las respuestas

#1 Gustavo Larriera (MVP)
09/02/2009 - 14:24 | Informe spam
No se puede definir un parámetro opcional en una función.

Se requiere proporcionar el valor de cada parámetro declarado cuando se
ejecuta la función, a menos que se defina un valor predeterminado para el
parámetro.

Gustavo Larriera, Microsoft MVP
http://www.linkedin.com/in/gustavolarriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Mauricio" wrote:

Hola a todos,
tengo esta función:
ALTER FUNCTION [dbo].[MCS_FN_SellPrice] ( @pProId INT, @pDate DATETIME,
@pSize INT, @pGroupId INT = NULL)
RETURNS money AS
BEGIN
DECLARE @Price AS MONEY
IF @pGroupId IS NULL
SET @pGroupId = (SELECT PGR_ID FROM MCS_PRICEGROUPS WHERE
PGR_CODE = 1)
SET @Price = (SELECT TOP 1 (CASE @pSize
WHEN 1 THEN PRI_SIZE1
WHEN 2 THEN PRI_SIZE2
WHEN 3 THEN PRI_SIZE3
WHEN 4 THEN PRI_SIZE4
WHEN 5 THEN PRI_SIZE5
WHEN 6 THEN PRI_SIZE6
WHEN 7 THEN PRI_SIZE7
WHEN 8 THEN PRI_SIZE8
WHEN 9 THEN PRI_SIZE9
END )
FROM MCS_PRICES WHERE PRI_PGR_ID = @pGroupId AND
PRI_PRD_ID > (SELECT PRD_ID FROM MCS_PRICEDATES WHERE PRD_PRO_ID =
@pProId AND
PRD_DATE = (SELECT MAX(PRD_DATE)
FROM MCS_PRICEDATES
WHERE PRD_PRO_ID = @pProId AND PRD_DATE <= @pDate )))
RETURN @Price
END

y quiero que el cuarto parámetro sea opcional. Pensé que así la
estaba definiendo correctamente pero si la llamo con 3 parámetros me
dice que el número de parámetros es insuficiente.
Qué es lo que estoy haciendo mal?
Muchas gracias por vuestra ayuda.

Mauricio
Copenhague, Dinamarca



Preguntas similares