Función con parámetro opcional (20090209)

09/02/2009 - 13:42 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 Jose TH
09/02/2009 - 14:01 | Informe spam
Creo que eso sólo se puede con los procedimientos almacenados en T-SQL.
Tampoco existe la sobrecarga.
En todo caso haz la llamada mandando un NULL en ese cuarto parámetro.


"Mauricio" escribió en el mensaje
news:
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