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

#11 Jose TH
18/11/2008 - 13:47 | Informe spam
Parece que realmente hay un problema con eso en SQL 2000, que por cierto
tampoco permite llamar getdate() dentro de la funcion.

http://www.forosdelweb.com/f87/func...io-583545/





<Jose TH >>> escribió en el mensaje
news:
Mostrar la cita
#12 JuanD
18/11/2008 - 13:50 | Informe spam
Ya por curiosidad, ¿cómo sería con una función escalar?, si el resultado
conseguido es el mismo me podría valer.
Gracias.

<Jose TH >>> escribió en el mensaje
news:
Mostrar la cita
#13 Carlos M. Calvelo
18/11/2008 - 13:56 | Informe spam
Hola Juan,

On 18 nov, 12:59, "JuanD" <xxxxxxxx> wrote:
Mostrar la cita
Prueba lo siguiente. Aunque no sea exactamente lo que quieres
te dará alguna idea.

Creamos un función Fechas() que devuelve una tabla con todas
las fechas en un rango y con el día de la semana ya precalculado.
La función es genérica, para poder utilizar en mas contextos.

CREATE FUNCTION Fechas(@mindate DATETIME, @maxdate DATETIME)
RETURNS @Fechas TABLE (fecha DATETIME, diasemana INT)
AS
BEGIN
WHILE @mindate <= @maxdate
BEGIN
INSERT INTO @fechas (fecha,diasemana)
VALUES (@mindate, (DATEPART(dw, @mindate)+@@DATEFIRST)%7)
SET @mindate = @mindate + 1
END
RETURN
END

Ahora podemos utilizarla por ejemplo así:

select * from dbo.Fechas('20080101', '20101231')

o crear una vista:

create view vSabados as
select * from dbo.Fechas('20080101', '20101231') where diasemana=0
/* 0=Sábado, 1=Domingo, etc. */

La función también la puedes usar para crear una tabla (Calendario
o algo así) con un rango de fechas lo suficientemente amplio para
lo que creas que vas a necesitar. Después usas esa tabla en vez
de la función.

Saludos,
Carlos
#14 JuanD
18/11/2008 - 13:58 | Informe spam
Gracias Jose TH, me lo temía.

Mi proposito era conseguir que me mostrara todas las fechas de sábados que
hay entre el '01/10/2008' y hoy, si alguna alma caritativa puede darme un
ejemplo de como se haría en una vista sin utilizar una función le estaría
eternemente agradecido.

Saludos.

<Jose TH >>> escribió en el mensaje
news:
Mostrar la cita
#15 Carlos M. Calvelo
18/11/2008 - 14:08 | Informe spam
Hola Diego,

On 18 nov, 13:25, Juan Diego Bueno wrote:
Mostrar la cita
GETDATE() es una función 'nondeterministic' y no se puede
usar para definir UDF's (de las que se supone que si tienen
que ser 'deterministic').
Una función 'nondeterministic', realmente no es una función :)
Busca en la ayuda.

Saludos,
Carlos
Ads by Google
Search Busqueda sugerida