Error GetDate en Function

26/07/2005 - 07:11 por Aventurero | Informe spam
Buenas amigos del foro.
Necesito crear la siguiente función en SQL Server 2000 desde el Analizador
de Consultas, pero no me permite debido al error del final.
Gracias por indicarme que debo hacer para que no genere el error.
CREATE FUNCTION F_HallarTarifa
(
@tarifa int,
@modelo int
)
RETURNS money
AS
BEGIN
declare @prima money
select @prima = 0

if substring(ltrim(str(@tarifa)),1,1) in('1', '3', '4', '8', '9')
begin
select @prima = round((a.tasax * b.salario) /30,0)
from tarifa a, Consecutivos b where a.codigo_tarifa = @tarifa
end
else if year(GETDATE()) - @modelo < 10
begin
select @prima = round((a.tasay * b.salario) /30,0)
from tarifa a, Consecutivos b where a.codigo_tarifa = @tarifa
end
else
begin
select @prima = round((a.tasaz * b.salario) /30,0)
from tarifa a, Consecutivos b where a.codigo_tarifa = @tarifa
end
RETURN @prima
END

Servidor: mensaje 443, nivel 16, estado 1, procedimiento F_HallarTarifa,
línea 17
Uso no válido de 'getdate' en una función.
Servidor: mensaje 156, nivel 15, estado 1, procedimiento F_HallarTarifa,
línea 22
Sintaxis incorrecta cerca de la palabra clave 'else'.

Atentamente,


Aventurero

Preguntas similare

Leer las respuestas

#1 qwalgrande
26/07/2005 - 10:22 | Informe spam
Hola.

No puedes llamar a una función no determinista, como getdate(), dentro de
otra función. Como alternativa, puedes añadir un parámetro más a tu función,
de tipo smalldatetime, y en la llamada a la función le pasas getdate(). Así
puedes manejar la fecha actual dentro de tu función, pero sin llamar a
getdate().

qwalgrande

"De lo que ves créete la mitad, de lo que no ves no te creas nada"
V. del V.


"Aventurero" escribió en el mensaje
news:
Buenas amigos del foro.
Necesito crear la siguiente función en SQL Server 2000 desde el Analizador
de Consultas, pero no me permite debido al error del final.
Gracias por indicarme que debo hacer para que no genere el error.
CREATE FUNCTION F_HallarTarifa
(
@tarifa int,
@modelo int
)
RETURNS money
AS
BEGIN
declare @prima money
select @prima = 0

if substring(ltrim(str(@tarifa)),1,1) in('1', '3', '4', '8', '9')
begin
select @prima = round((a.tasax * b.salario) /30,0)
from tarifa a, Consecutivos b where a.codigo_tarifa = @tarifa
end
else if year(GETDATE()) - @modelo < 10
begin
select @prima = round((a.tasay * b.salario) /30,0)
from tarifa a, Consecutivos b where a.codigo_tarifa = @tarifa
end
else
begin
select @prima = round((a.tasaz * b.salario) /30,0)
from tarifa a, Consecutivos b where a.codigo_tarifa = @tarifa
end
RETURN @prima
END

Servidor: mensaje 443, nivel 16, estado 1, procedimiento F_HallarTarifa,
línea 17
Uso no válido de 'getdate' en una función.
Servidor: mensaje 156, nivel 15, estado 1, procedimiento F_HallarTarifa,
línea 22
Sintaxis incorrecta cerca de la palabra clave 'else'.

Atentamente,


Aventurero


Respuesta Responder a este mensaje
#2 Aventurero
26/07/2005 - 15:10 | Informe spam
Gracias qwalgrande
Lo pondré en práctica

Atentamente,


Aventurero
Respuesta Responder a este mensaje
#3 Don Roque
26/07/2005 - 20:14 | Informe spam
Una forma de poder hacer lo que estas necesitando hacer es lo
siguiente:

1) crea una vista con la siguiente sintaxis

Create View CurrentDate
as select getdate() as ActualDate

2) en tu funcion, podes tomar el GetDate de la siguiente manera

declare @fecha datetime
select @fecha = max(actualdate)
from CurrentDate


Con esto saltas el tema de usar GetDate. Ahora, habra que ver que
opinan los gurues del grupo en cuanto a esta solucion.

Saludos
Respuesta Responder a este mensaje
#4 Aventurero
26/07/2005 - 23:11 | Informe spam
Gracias Don Roque

Lo solucioné pasando Getdate() como parámetro, que es la directa.

Atentamente,


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