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

#21 JuanD
18/11/2008 - 16:09 | Informe spam
Muchas gracias Carlos, me sirve perfectamente

"Carlos M. Calvelo" escribió en el mensaje
news:
Hola otra vez Juan,

On 18 nov, 13:56, "Carlos M. Calvelo" wrote:
Mostrar la cita
Tanto a la consulta como a la definición de la vista
le puedes añadir condiciones con el where, naturalmente.

Como solo quieres los sábados hasta hoy:

...
WHERE diasemana=0 AND fecha <= getdate()

Saludos,
Carlos
#22 JuanD
18/11/2008 - 16:10 | Informe spam
Gracias Jose TH por tu paciencia, el ejemplo de Carlos me va bien.
Saludos.

<Jose TH >>> escribió en el mensaje
news:
Mostrar la cita
#23 Carlos Sacristan
18/11/2008 - 16:21 | Informe spam
Pues con una función escalar podría ser como la que sigue:

CREATE FUNCTION dbo.fn_NumberOfSats (@s DATETIME, @e DATETIME)
RETURNS INT AS
BEGIN
DECLARE @wks INT, @satDays INT

SET @wks = DATEDIFF( week, @s, @e) - 1
SELECT @satDays = @wks

IF DATEPART(weekday, @s + @@DATEFIRST - 1) < 7
SELECT @satDays = @satDays + 1

IF DATEPART(weekday, @e + @@DATEFIRST- 1) IN(6, 7)
SELECT @satDays = @satDays + 1

RETURN (@satDays)
END

GO

SELECT dbo.fn_NumberOfSats('20081001', GETDATE()) AS numberOfSats


Un saludo
-
www.navento.com
Servicios de Localización GPS


"JuanD" wrote:

Mostrar la cita
#24 Carlos M. Calvelo
18/11/2008 - 16:25 | Informe spam
On 18 nov, 16:09, "JuanD" <xxxxxxxx> wrote:
Mostrar la cita
De nada Juan.

Si no te interesa tener una función tan genérica porque solo le
ves aplicación para lo de los sábados, pues defines una función
más específica y la usas igual que la función Fechas().

Esta función devuelve una tabla con solo una columna con todos
los sábados entre dos fechas:

CREATE FUNCTION Sabados(@mindate DATETIME, @maxdate DATETIME)
RETURNS @Fechas TABLE (fecha DATETIME)
AS
BEGIN
DECLARE @ds INT

SET @ds = (DATEPART(dw, @mindate)+@@DATEFIRST)%7
IF @ds <> 0 -- @mindate no es sábado?
SET @mindate = @mindate + 7 - @ds -- sábado siguiente!

WHILE @mindate <= @maxdate
BEGIN
INSERT INTO @fechas (fecha) VALUES (@mindate)
SET @mindate = @mindate + 7
END
RETURN
END

Saludos,
Carlos
#25 Jose TH
18/11/2008 - 16:36 | Informe spam
Por nada aunque con ese ejemplo cuando cambies de año tendrás que modificar
la definición de la vista. .
Yo evaluaría finalmente la necesidad de tener una vista así y no mejor hacer
un Store procedure.

Otra opción que tienes es cambiar de versión a SQL Server 2008 que si no me
equivoco creo no tiene al menos el problema de llamar a getdate() dentro de
la funcion o en el parametro.


"JuanD" <xxxxxxxx> escribió en el mensaje
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida