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

Preguntas similare

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


Respuesta Responder a este mensaje
#2 Mauricio
09/02/2009 - 14:11 | Informe spam
Es que precisamente lo que quería hacer era tener que modificar el
código para agregar ese 4to parámetro en todas las llamadas :(

Jose TH avait soumis l'idée :
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.

Copenhague, Dinamarca







Mauricio
Copenhague, Dinamarca
Respuesta Responder a este mensaje
#3 Gustavo Larriera (MVP)
09/02/2009 - 14:23 | Informe spam
Lo que dice Jose TH es correcto, no se pueden definir parámetros opcionales
en funciones. 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:

Es que precisamente lo que quería hacer era tener que modificar el
código para agregar ese 4to parámetro en todas las llamadas :(

Jose TH avait soumis l'idée :
> 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.
>>
>> Copenhague, Dinamarca
>>
>>

Mauricio
Copenhague, Dinamarca



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida