El nombre del objeto no es válido (UDF)

18/11/2008 - 10:58 por JuanD | Informe spam
Hola,

He creado la siguiente función que en teoría debería devolver la fecha de
los días con sábados que hay desde una fecha hasta hoy (desde el QA
funciona);

CREATE FUNCTION dbo.Sabados (@FechaI smalldatetime)
RETURNS @Tabla TABLE (Fecha smalldatetime)
BEGIN
declare @i int
declare @dia varchar(20)
declare @fecha datetime
select @i = 0
while @i > - DateDiff(Day, '01/10/2008', @FechaI)
begin
select @dia = DateName(dw, dateadd(d, @i, @FechaI))
select @fecha = DateAdd(d, @i, @FechaI)
if @dia in ('Sábado')
begin
INSERT INTO @Tabla Select convert(nvarchar, @fecha, 103)
end
select @i = @i - 1
end
RETURN
END

A la hora de llamarla así; Select dbo.Sabados(getdate()), me lanza el
siguiente error;

Servidor: mensaje 208, nivel 16, estado 1, línea 1
El nombre de objeto 'dbo.Sabados' no es válido.

Cuando se que el nombre de la función existe y que funciona si ejecuto el
código desde el QA, ¿qué estoy haciendo mal?.
Utilizo SQL Server 2000 SP4.
Gracias.

Preguntas similare

Leer las respuestas

#26 Alejandro Mesa
18/11/2008 - 17:58 | Informe spam
JuanD,

Create una tabla calendario y usala en la funcion.

create function dbo.Sabados (
@sd datetime,
@ed datetime
)
returns table
as
return (
select [fecha]
from dbo.calendario
where nombre_dia = 'Sabado' and fecha between @sd and @ed
)
GO

select *
from dbo.Sabados('20080101', '20081231')
GO

Why should I consider using an auxiliary calendar table?
http://sqlserver2000.databases.aspf...table.html


AMB



"JuanD" wrote:

Gracias, pero no me vale porque debo utilizar la función dentro de una vista
y las vistas no me dejan utilizar variables.

"Juan Diego Bueno" escribió en el mensaje
news:
Hola JuanD:

¿Has probado a guardar primero GETDATE() en una variable de tipo
datetime y pasársela a la función de usuario?

On 18 nov, 11:26, "JuanD" <xxxxxxxx> wrote:
> Y si hago esto;
> Select * From dbo.Sabados('18/11/2008')
> funciona, entonces, ¿cómo le paso la fecha actual?
>
> "JuanD" <xxxxxxxx> escribió en el
> mensajenews:%
>
> > Hola,
>
> > He creado la siguiente función que en teoría debería devolver la fecha
> > de
> > los días con sábados que hay desde una fecha hasta hoy (desde el QA
> > funciona);
>
> > CREATE FUNCTION dbo.Sabados (@FechaI smalldatetime)
> > RETURNS @Tabla TABLE (Fecha smalldatetime)
> > BEGIN
> > declare @i int
> > declare @dia varchar(20)
> > declare @fecha datetime
> > select @i = 0
> > while @i > - DateDiff(Day, '01/10/2008', @FechaI)
> > begin
> > select @dia = DateName(dw, dateadd(d, @i, @FechaI))
> > select @fecha = DateAdd(d, @i, @FechaI)
> > if @dia in ('Sábado')
> > begin
> > INSERT INTO @Tabla Select convert(nvarchar, @fecha, 103)
> > end
> > select @i = @i - 1
> > end
> > RETURN
> > END
>
> > A la hora de llamarla así; Select dbo.Sabados(getdate()), me lanza el
> > siguiente error;
>
> > Servidor: mensaje 208, nivel 16, estado 1, línea 1
> > El nombre de objeto 'dbo.Sabados' no es válido.
>
> > Cuando se que el nombre de la función existe y que funciona si ejecuto
> > el
> > código desde el QA, ¿qué estoy haciendo mal?.
> > Utilizo SQL Server 2000 SP4.
> > Gracias.



Respuesta Responder a este mensaje
#27 Carlos M. Calvelo
18/11/2008 - 18:34 | Informe spam
Hola Alejandro,

On 18 nov, 17:58, Alejandro Mesa
wrote:
JuanD,

Create una tabla calendario y usala en la funcion.




De acuerdo con lo de la tabla. Pero
teniendo ya la tabla, para que quiere la función? :-)

Saludos,
Carlos
Respuesta Responder a este mensaje
#28 Alejandro Mesa
18/11/2008 - 18:49 | Informe spam
Carlos M. Calvelo,

Eso mismo pense yo, pero le deje la opcion al OP.


AMB


"Carlos M. Calvelo" wrote:

Hola Alejandro,

On 18 nov, 17:58, Alejandro Mesa
wrote:
> JuanD,
>
> Create una tabla calendario y usala en la funcion.
>

De acuerdo con lo de la tabla. Pero
teniendo ya la tabla, para que quiere la función? :-)

Saludos,
Carlos

Respuesta Responder a este mensaje
#29 Carlos M. Calvelo
18/11/2008 - 19:51 | Informe spam
On 18 nov, 16:36, "Jose TH" <>>> wrote:
Por nada aunque con ese ejemplo cuando cambies de año tendrás que modificar
la definición de la vista.  .



Por que tu lo digas.

Yo evaluaría finalmente la necesidad de tener una vista así y no mejor hacer
un Store procedure.



Yo no.
Respuesta Responder a este mensaje
#30 Jose TH
18/11/2008 - 20:32 | Informe spam
Ya empieza.

Por nada aunque con ese ejemplo cuando cambies de año tendrás que
modificar
la definición de la vista. .


Por que tu lo digas.



Pues no porque yo lo diga.

Cualquiera con un mínimo de sentido común y conocimiento que se tope con una
vista con CONSTANTES incrustadas como ésta:

create view vSabados as
select * from dbo.Fechas('20080101', '20101231') where diasemana=0

Y no le quedaría más que decir que quien la pensó no se le ocurrió que hay
vida después del 2010. Qué brillante diseño!.

>Yo evaluaría finalmente la necesidad de tener una vista así y no mejor
>hacer
>un Store procedure.

Yo no.



Claro que no, es que tu mente anti Store Procedure no te permite admitir la
tontería que has planteado y que un store procedure puede usarse alguna vez.


Nota: Cuando vuelvas a plagiar la idea de otro, como la de la suma de 7
días, por lo menos da los créditos sí? copión! :)
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida