Error en Funcion

08/04/2005 - 17:16 por Daniel Sauco | Informe spam
tengo esta funcion la cual me da error la funcion GETDATE()
el error es 443: invalid useof 'getdate' within a function.

si me pueden dicir que estoy haciendo mal

esta funcion me calcula la edad de una persona, en la cual yo le paso como
parametro la fecha de nacimiento

Gracias

CREATE FUNCTION [dbo].[CalEdad]
(@Fecha [datetime])
RETURNS tinyint AS
BEGIN
declare @Edad [tinyint]
declare @FechaActual [datetime]

set @FechaActual = Getdate()

set @Edad = (DateDiff(month, @Fecha, @FechaActual) / 12)

RETURN @Edad
END

Preguntas similare

Leer las respuestas

#1 Don Roque
08/04/2005 - 17:24 | Informe spam
El problema que estas teniendo se debe a que por una cuestion de
performance el SQL SERVER limita las user defined functions, haciendo
que sean DETERMINISTICAS *

Tenes dos maneras de resolverlo. Una, estandar, haces que la funcion
reciba por parametro una fecha mas; y luego, donde llamas a la funcion
le pasas la fecha que entrega como resultado el GETDATE. Ahora, si no
queres agregar el parametro, hay otra manera de que lo puedas hacer.
Crea una vista con el siguiente SCRIPT


CREATE VIEW CURDATE
as
select getdate() as FechaAhora

Luego, en la funcion, obtenes la fecha que te entregue la vista y
procesas.

Espero que te sirva. Saludos



* Se dice que una funcion es DETERMINISTICA cuando al ser llamada con
los mismos parametros, siempre entrega el mismo resultado. Por
consiguiente, si vos dentro de tu User Defined Function usas funciones
como GETDATE o RAND el compilador de SQL SERVER no te va a dejar
crearlas, por este mismo tema.
Respuesta Responder a este mensaje
#2 Daniel Sauco
08/04/2005 - 18:58 | Informe spam
ok. gracias

otra duda:

se puede invocar esta funcion desde un campo calculado de una tabla
si se puede me indicas como

Gracias




"Daniel Sauco" escribió en el mensaje
news:
tengo esta funcion la cual me da error la funcion GETDATE()
el error es 443: invalid useof 'getdate' within a function.

si me pueden dicir que estoy haciendo mal

esta funcion me calcula la edad de una persona, en la cual yo le paso como
parametro la fecha de nacimiento

Gracias

CREATE FUNCTION [dbo].[CalEdad]
(@Fecha [datetime])
RETURNS tinyint AS
BEGIN
declare @Edad [tinyint]
declare @FechaActual [datetime]

set @FechaActual = Getdate()

set @Edad = (DateDiff(month, @Fecha, @FechaActual) / 12)

RETURN @Edad
END


Respuesta Responder a este mensaje
#3 Don Roque
08/04/2005 - 23:15 | Informe spam
si o si tiene que ser en una tabla? no puede ser en una vista?
Respuesta Responder a este mensaje
#4 Don Roque
12/04/2005 - 19:28 | Informe spam
Fijate de correr este SCRIPT en la base de datos NORTHWIND. El script
crea
tu funcion y ademas, crea una vista. La vista hace un SELECT * from
Employees y agrega un campo EDAD, calculandolo con la funcion que vos
hiciste.

CREATE FUNCTION [dbo].[CalEdad]
(@Fecha [datetime], @fechaactual

datetime)
RETURNS tinyint AS
BEGIN
declare @Edad [tinyint]

set @Edad = (DateDiff(month, @Fecha, @FechaActual) / 12)


RETURN @Edad
END

select * from employees



create view vwTest as
select *, dbo.CalEdad(birthdate, getdate()) as Edad
from employees
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida