If o case en un UDF

15/09/2005 - 19:44 por Matías | Informe spam
Hola a todos, tengo un udf que recibe entre uno se sus parámetros un campo
de tipo fecha, pero esta fecha puede ser NULL, entonces debo preguntar si la
fecha pasada es NULL debe tomar la fecha actual, probe con algo asi pero no
funca:

create function dbo.udf1 (
@Fecha datetime
)
returns varchar(50)
as
begin

IF @Fecha IS NULL
@Fecha = GetDate() --aqui me salta un error de uso no valido de GetDate

return @s
end
go

Como puedo hacer? probe con CASE pero me salta el mismo error.
Saludos y mil gracias..
por las dudas: SQL2000 SP3

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
15/09/2005 - 20:08 | Informe spam
Matías,

No se puede referenciar una function no determinista (como getdate() que da
un valor distinto cada vez que se llamam con los mismos paraametros) dentro
de una udf. La primera opcion es usar un tercer parametro donde pases
getdate() y la otra es crear una vista desde done puedas seleccionar getdate()

Ejemplo:

use northwind
go

create view dbo.vw_now
as
select getdate() as now
go

create function dbo.f1 (
@now datetime
)
returns table
as
return (select @now as parametro_funcion, now as valor_vista from dbo.vw_now)
go

declare @now datetime

set @now = getdate()

select *
from dbo.f1(@now)
go

drop function dbo.f1
go

drop view dbo.vw_now
go


AMB



"Matías" wrote:

Hola a todos, tengo un udf que recibe entre uno se sus parámetros un campo
de tipo fecha, pero esta fecha puede ser NULL, entonces debo preguntar si la
fecha pasada es NULL debe tomar la fecha actual, probe con algo asi pero no
funca:

create function dbo.udf1 (
@Fecha datetime
)
returns varchar(50)
as
begin

IF @Fecha IS NULL
@Fecha = GetDate() --aqui me salta un error de uso no valido de GetDate

return @s
end
go

Como puedo hacer? probe con CASE pero me salta el mismo error.
Saludos y mil gracias..
por las dudas: SQL2000 SP3



Respuesta Responder a este mensaje
#2 Matías
15/09/2005 - 20:37 | Informe spam
OK, muchas gracias por tu tiempo, voy a tratar de implementar la vista a ver
si me sale, lo único es que en tu ejemplo la funcion retorna una tabla, yo
necesito que retorne un varchar, supongo que no hay porblemas con eso?
Lamentablemente ahora no lo puedo probar.
Saludos..

"Alejandro Mesa" escribió en el
mensaje news:
Matías,

No se puede referenciar una function no determinista (como getdate() que


da
un valor distinto cada vez que se llamam con los mismos paraametros)


dentro
de una udf. La primera opcion es usar un tercer parametro donde pases
getdate() y la otra es crear una vista desde done puedas seleccionar


getdate()

Ejemplo:

use northwind
go

create view dbo.vw_now
as
select getdate() as now
go

create function dbo.f1 (
@now datetime
)
returns table
as
return (select @now as parametro_funcion, now as valor_vista from


dbo.vw_now)
go

declare @now datetime

set @now = getdate()

select *
from dbo.f1(@now)
go

drop function dbo.f1
go

drop view dbo.vw_now
go


AMB



"Matías" wrote:

> Hola a todos, tengo un udf que recibe entre uno se sus parámetros un


campo
> de tipo fecha, pero esta fecha puede ser NULL, entonces debo preguntar


si la
> fecha pasada es NULL debe tomar la fecha actual, probe con algo asi pero


no
> funca:
>
> create function dbo.udf1 (
> @Fecha datetime
> )
> returns varchar(50)
> as
> begin
>
> IF @Fecha IS NULL
> @Fecha = GetDate() --aqui me salta un error de uso no valido de


GetDate
>
> return @s
> end
> go
>
> Como puedo hacer? probe con CASE pero me salta el mismo error.
> Saludos y mil gracias..
> por las dudas: SQL2000 SP3
>
>
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
15/09/2005 - 20:47 | Informe spam
Matías,

si me sale, lo único es que en tu ejemplo la funcion retorna una tabla, yo



Eso fue un ejemplo de como pasar o accesar el valor de getdate() desde una
funcion. Tambien puedes hacer lo siguiente:

create view vw_now
as
select getdate() as now
go

create function dbo.f1 (
@sd datetime,
@ed datetime
)
returns varchar(50)
as
begin
declare @s varchar(50)
declare @y int
declare @m int
declare @d int

set @ed = coalesce(@ed, (select now from dbo.vw_now))

set @s = ''
set @y = datediff(year, @sd, @ed) - case when month(@ed) < month(@sd) or
(month(@ed) = month(@sd) and day(@ed) < day(@sd)) then 1 else 0 end
set @m = datediff(month ,dateadd(year, @y, @sd), @ed) - case when day(@ed) <
day(dateadd(year, @y, @sd)) then 1 else 0 end
set @d = datediff(day, dateadd(month, @m, dateadd(year, @y, @sd)), @ed)
set @s = ltrim(@y) + ' año(s), ' + ltrim(@m) + ' mes(es), ' + ltrim(@d) + '
dia(s)'

return @s
end
go


AMB

"Matías" wrote:

OK, muchas gracias por tu tiempo, voy a tratar de implementar la vista a ver
si me sale, lo único es que en tu ejemplo la funcion retorna una tabla, yo
necesito que retorne un varchar, supongo que no hay porblemas con eso?
Lamentablemente ahora no lo puedo probar.
Saludos..

"Alejandro Mesa" escribió en el
mensaje news:
> Matías,
>
> No se puede referenciar una function no determinista (como getdate() que
da
> un valor distinto cada vez que se llamam con los mismos paraametros)
dentro
> de una udf. La primera opcion es usar un tercer parametro donde pases
> getdate() y la otra es crear una vista desde done puedas seleccionar
getdate()
>
> Ejemplo:
>
> use northwind
> go
>
> create view dbo.vw_now
> as
> select getdate() as now
> go
>
> create function dbo.f1 (
> @now datetime
> )
> returns table
> as
> return (select @now as parametro_funcion, now as valor_vista from
dbo.vw_now)
> go
>
> declare @now datetime
>
> set @now = getdate()
>
> select *
> from dbo.f1(@now)
> go
>
> drop function dbo.f1
> go
>
> drop view dbo.vw_now
> go
>
>
> AMB
>
>
>
> "Matías" wrote:
>
> > Hola a todos, tengo un udf que recibe entre uno se sus parámetros un
campo
> > de tipo fecha, pero esta fecha puede ser NULL, entonces debo preguntar
si la
> > fecha pasada es NULL debe tomar la fecha actual, probe con algo asi pero
no
> > funca:
> >
> > create function dbo.udf1 (
> > @Fecha datetime
> > )
> > returns varchar(50)
> > as
> > begin
> >
> > IF @Fecha IS NULL
> > @Fecha = GetDate() --aqui me salta un error de uso no valido de
GetDate
> >
> > return @s
> > end
> > go
> >
> > Como puedo hacer? probe con CASE pero me salta el mismo error.
> > Saludos y mil gracias..
> > por las dudas: SQL2000 SP3
> >
> >
> >



Respuesta Responder a este mensaje
#4 Matías
15/09/2005 - 21:32 | Informe spam
OK, mil gracias..
Saludos..
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida