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

#51 Luis
19/11/2008 - 21:13 | Informe spam
Como que no te enteras que estas discutiendo con un troll.
Pero debo decirte que le has hecho sudar :)


"Jose TH >>" wrote in message
news:%
>Mañana espero una visita de la brigada de 'ética y moral'.
Seguro que tendré que aguantar un par de lecciones.



Estamos de acuerdo. No te caería nada mal. :)

Saludos



Respuesta Responder a este mensaje
#52 Jose TH
20/11/2008 - 02:34 | Informe spam
Como que no te enteras que estas discutiendo con un troll.



Claro que lo sé. Son dos y bastante famosos en estos foros. Pero éste por
lo menos me hace reír.

Pero debo decirte que le has hecho sudar :)




Es lógico, cuando no se sabe qué decir después de haber metido la pata
recomendando un CREATE VIEW basado en una función tipo tabla con parámetros
fijos de fecha.
El se delata solito con sus insultos de guardia de muelle.



"Luis" escribió en el mensaje
news:%23iceH%
Como que no te enteras que estas discutiendo con un troll.
Pero debo decirte que le has hecho sudar :)


"Jose TH >>" wrote in message
news:%
>Mañana espero una visita de la brigada de 'ética y moral'.
Seguro que tendré que aguantar un par de lecciones.



Estamos de acuerdo. No te caería nada mal. :)

Saludos






Respuesta Responder a este mensaje
#53 Jose TH
20/11/2008 - 02:38 | Informe spam

Siempre alguien lo recuerda, los troll solo buscan confundir a los
foristas



Yo hasta había llegado a dudar que éste era su principal objetivo. Pero
viendo lo del CREATE VIEW basado en una función tipo tabla con parámetros
fijos de fecha, no me queda que darte la razón a ti y a los demás que dicen
eso de los Troll's.

y cuando mas que troll son insultantes es mejor ignorar lo que dicen.




Es cierto, pero hay que admitir que al menos éste, nos pone a reír. No
queda mal un poco de diversión en un mundo tan ajetreado. :)




"Johan Ramos" wrote in message
news:OBzU%
No tengo velas en ese entierro pero yo tu y dejo eso porque es verdad
que te desmientes a ti mismo aparte de que primero lo insultas y despues
llamas a debatir.

Se puede debatir sin insultar a nadie.


Johan

"Carlos M. Calvelo" wrote in message
news:

Pues tendré que reaccionar otra vez. Y repetir, repetir y volver a
repetir lo ya dicho y que no haces más que distorsionar.


On 19 nov, 00:58, "Jose TH" <>>> wrote:
>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()

Todos ven claro como el Sr. Carlos Calvelo dice "la definición de la
vista"
a pesar de que lo niega en otros mensajes.




Qué es lo que he negado? Tienes que aprender a leer.
Si una vista existe tendrá que tener una definición; una expresión
que la defina. Qué he negado?


.

Para los que leen el foro y tengan dudas similares a la planteada por el
OP
y quieran un consejo más orientado a un mejor performance y mejor
mantenimiento del código de sus vistas:

No se les ocurra ni de asomo basar la definición de una vista en una
función
con parámetros fijos y mucho menos de valores de fechas como lo que
propone
el Sr. Carlos Calvelo, sobre todo para una función tipo tabla.

Las razones:
1) Mantenimiento: La vista no va a funcionar a partir del 1ero de Enero
del
2011. Para que funcione habrá que modificar la definición de la vista. Y
no
solo eso sino cada vez que se agote el período fijo que el Sr. Carlos
Calvelo indicó. Eso es una terrible decisión de diseño que ya es
costosa
antes de "implementarla".



Y ya desde mi primer reacción he dejado claro que lo del 2010 es
solo un ejemplo de como utilizar la función (sea la que puse yo o
la original que ya tenía el OP, con los cambios necesarios para
hacer posible ese uso). Pero quieres machacar y machacar ahí...
pues machaca.


2)Performance: Aunque a la vista se le envíen parámetros como sugiere
en
este mensaje el Sr. Carlos Calvelo, pues qué creen? la función ni se
enterará ya que como quiera para materializar la vista, la función
tendrá
que generar la tabla completa para los 3 años, o sea 3 años por 52
sábados
aproximadamente, para solo sacar los pocos registros del parámetro de la
vista. Ni hablar de si en su implementación el Sr. Carlos Calvelo
amplía el
rango de la definición de su vista a por ejemplo 30 años, se imaginan?
para
sacar ej. los sábados de un solo mes, la función tendría que generar de
todos modos 30 x 52 sábados aproximadamente. Exagerado.



Y he dejardo muy claro en mi primer reacción que era una función
genérica. Eso significa que no es específica para este caso
(explicación especial para ti).

Además la implementación de la vista se puede cambiar, y lo que hoy
es una vista mañana es una tabla y pasado mañana una vista otra vez.
Y la función que se usa en una vista hoy es una función y mañana es
una tabla normal. Todo eso sin romper el diseño lógico.
Esas posibilidades están todas en mi primer reacción.

Eso no se puede decir de SP's. El OP ya tenía una vista, sabes?




Soluciones:
1)La mejor debería ser la que propone el Sr. Alejandro Mesa y hasta
menciona
de refilón el propio Sr. Carlos Calvelo, ya que es una tabla
persistente a
la que consultaremos como cualquier tabla.



De refilón? (Repito) He propuesto también la posibilidad de utilizar
esa misma función para popular una tabla base 'Calendario'. Por eso
es una función genérica, y no solo para sábados.
Con la misma función se puede hacer eso, o meterla en la vista
original del OP, como este ya estaba tratando de hacer. Por eso
es genérica. A ver si repitiendo y repitiendo te enteras.

Mas tarde dices que te gusta más la idea de Alejandro de crear
un calendario. Hago referencia a que yo ya había dado esa opción
y que la función se puede usar para generar los datos en dicho
calendario. Pero muy convenientemente eso se ignora. O ahora al
no poder seguir ignorandolo es 'de refilón'.

Eso cuando tu estabas intentando solo decirle al OP como usar
la función que ya tenía y ni de eso fuistes capaz, para luego
proponer un SP. Solo Alejandro y yo hemos propuesto una
función (como deseaba el OP) y una tabla 'Calendario'.

Alejandro puso como opción una función sobre una tabla Calendario,
para utilizar en una vista. Por qué? Pues porque eso precisamente
era lo que quería el OP. Teniendo la tabla ya no tiene sentido la
función pero, como Alejandro aclaró, le deja la opción al OP.
Por qué digo esto? Son también opciones. Pero tu sin aportar nada
lo único que te interesa es criticar opciones según quien sea el
que las dá.

Qué agenda tienes tu entonces?



2)Usar un Store Procedure el cual en ninguna versión de SS tiene
limitantes
ni para enviarle getdate() como parámetro ni para usar getdate() dentro
de
su lógica. Sin embargo tiene la desventaja que no se puede usar como
una
vista o función tipo tabla, es decir, como si fuese una tabla. Pero
claro
que depende del uso que se le vaya a dar ya que si lo que se desea es
simplemente generar la tabla y traer los resultados a la aplicación, el
SP
te basta y sobra.



Usar un SP es la peor de todas las opciones dadas. Y es precisamente
lo que has propuesto tu, desesperado por no encontrar una solución
directa al problema te tenía el OP con la función.
Por que es la peor? Te remito a los conceptos que te he dejado en
otra reacción; pero que ya has demostrado ampliamente en tus últimas
reacciones sobre lo de diseño lógico e implementación que no lo
entiendes. Ni eres digno de más explicaciones.

Malas decisiones a nivel lógico tienen consecuencias muchos mas
graves que los fallos que uno pueda cometer con la implementación.


3) Cambiarte a una versión más reciente de SQL Server que no tenga la
limitación del GetDate() que tienen las funciones de usuario en la
versión
2000. Contrario a lo que sugiere alguien en un mensaje, deben saber que
SS
2008 (que es el que uso actualmente) no tiene esa limitante. Pero creo
que
ya la versión 2005 no la tenía.




Vaya opción! Migrar solo porque se necesita una lista de sábados!
Tus opciones han sido un SP y cambiarase de versión.
Y yo que creía que la del SP era la peor. Brillante!

Yo también tengo una conclusión, que repetiré otra vez para que
los leen este foro y tengan alguna duda (como dices tu) sobre qué
tipo de juego haces tu:

1)
En mi primer reacción he dejado ver al OP como podía conseguir
hacer uso de la función en la vista, como él quería. Y he
propuesto además que podía utilizarla para popular una tabla
'Calendario' para usarla en vez de la función. Por eso es genérica.

En cambio tu has hecho varios intentos de dejarle ver al OP como
tenía que hacer uso de la función que este ya tenía y nada mas.
Repito... sin resultado. Y por eso te cambias a lo del SP.
Entretando el OP parece estar satisfecho con el uso de la
función como él mismo quería.

2)
Entonces Alejandro proponer crear una tabla 'Calendario' y
(repito) por si el OP insiste en una función (que ya no sería
necesaria), pues también se la dá.

3)
Es ahora cuando para ti la opción de una tabla base 'Calendario'
parece ser mejor que todo lo que tu has propuesto. Opción que ya
estaba en mi primer reacción.

4)
Analizando ahora nos vienes a decir que las opciones (otras que
la creación de una tabla base como propone Alejandro) son todas
ridículas, y eso basandose en meros ejemplos que se han puesto
y tratando de ignorar que esa misma opción está también en mi
primer reacción en en este hilo.

Esa es mi conclusión.
Mi primera reacción en el hilo está ahí para quien la quiera leer
detenidamente, que tampoco es tan larga.


Otras conclusiones:

"Sr. Carlos Calvelo ..."
"Sr. Alejandro Mesa ..."

Ufff!
Que se vean otros hilos tuyos donde tratas a los demás como se te
ha tratado ahora a tí. Y tu respuesta es entonces tratar a los demás
de 'Señor' y criticar las propuestas iniciales que alguien ha
hecho para después acabar concluyendo que porque lo dice también
el 'Sr.' Alejandro Mesa entonces sí es lo que hay que hacer.

Ni has podido dar respuesta a la pregunta original del OP (como hago
para poder utilizar la función desde la vista?), ni has propuesto
ninguna alternativa de más valor. Solo se te ha ocurrido proponer
una ruptura de la interfaz con las aplicaciones y usuarios sobre la
que el OP, parece ser, ya había tomado una sabia decisión. Pero
estoy hablando otra vez del modelo lógico y de su implementación
y no espero que lo vayas a entender ahora la diferencia, visto ya
lo visto.

Estás jugando un juego sucio y tu agenda en esto debe de oler
bastante mal. Ya aparte de insultos, realmente das asco.
No es por nada que Alfredo ya te ha metido en (como él dice)
en el filtro de *idiotas*.
Puede seguir distorsionando y distorsionando, pero eso no
cambiará para nada aquello que tratas de distorsionar.



Respuesta Responder a este mensaje
#54 Jose TH
20/11/2008 - 04:22 | Informe spam
El no se da cuenta que parece un niño. Y uno mal criado.

"Johan Ramos" escribió en el mensaje
news:
Mejor dicho, para mi haces el ridiculo.

Johan


"Carlos M. Calvelo" wrote in message
news:

Pues tendré que reaccionar otra vez. Y repetir, repetir y volver a
repetir lo ya dicho y que no haces más que distorsionar.


On 19 nov, 00:58, "Jose TH" <>>> wrote:
>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()

Todos ven claro como el Sr. Carlos Calvelo dice "la definición de la
vista"
a pesar de que lo niega en otros mensajes.




Qué es lo que he negado? Tienes que aprender a leer.
Si una vista existe tendrá que tener una definición; una expresión
que la defina. Qué he negado?


.

Para los que leen el foro y tengan dudas similares a la planteada por el
OP
y quieran un consejo más orientado a un mejor performance y mejor
mantenimiento del código de sus vistas:

No se les ocurra ni de asomo basar la definición de una vista en una
función
con parámetros fijos y mucho menos de valores de fechas como lo que
propone
el Sr. Carlos Calvelo, sobre todo para una función tipo tabla.

Las razones:
1) Mantenimiento: La vista no va a funcionar a partir del 1ero de Enero
del
2011. Para que funcione habrá que modificar la definición de la vista. Y
no
solo eso sino cada vez que se agote el período fijo que el Sr. Carlos
Calvelo indicó. Eso es una terrible decisión de diseño que ya es
costosa
antes de "implementarla".



Y ya desde mi primer reacción he dejado claro que lo del 2010 es
solo un ejemplo de como utilizar la función (sea la que puse yo o
la original que ya tenía el OP, con los cambios necesarios para
hacer posible ese uso). Pero quieres machacar y machacar ahí...
pues machaca.


2)Performance: Aunque a la vista se le envíen parámetros como sugiere en
este mensaje el Sr. Carlos Calvelo, pues qué creen? la función ni se
enterará ya que como quiera para materializar la vista, la función tendrá
que generar la tabla completa para los 3 años, o sea 3 años por 52
sábados
aproximadamente, para solo sacar los pocos registros del parámetro de la
vista. Ni hablar de si en su implementación el Sr. Carlos Calvelo amplía
el
rango de la definición de su vista a por ejemplo 30 años, se imaginan?
para
sacar ej. los sábados de un solo mes, la función tendría que generar de
todos modos 30 x 52 sábados aproximadamente. Exagerado.



Y he dejardo muy claro en mi primer reacción que era una función
genérica. Eso significa que no es específica para este caso
(explicación especial para ti).

Además la implementación de la vista se puede cambiar, y lo que hoy
es una vista mañana es una tabla y pasado mañana una vista otra vez.
Y la función que se usa en una vista hoy es una función y mañana es
una tabla normal. Todo eso sin romper el diseño lógico.
Esas posibilidades están todas en mi primer reacción.

Eso no se puede decir de SP's. El OP ya tenía una vista, sabes?




Soluciones:
1)La mejor debería ser la que propone el Sr. Alejandro Mesa y hasta
menciona
de refilón el propio Sr. Carlos Calvelo, ya que es una tabla persistente
a
la que consultaremos como cualquier tabla.



De refilón? (Repito) He propuesto también la posibilidad de utilizar
esa misma función para popular una tabla base 'Calendario'. Por eso
es una función genérica, y no solo para sábados.
Con la misma función se puede hacer eso, o meterla en la vista
original del OP, como este ya estaba tratando de hacer. Por eso
es genérica. A ver si repitiendo y repitiendo te enteras.

Mas tarde dices que te gusta más la idea de Alejandro de crear
un calendario. Hago referencia a que yo ya había dado esa opción
y que la función se puede usar para generar los datos en dicho
calendario. Pero muy convenientemente eso se ignora. O ahora al
no poder seguir ignorandolo es 'de refilón'.

Eso cuando tu estabas intentando solo decirle al OP como usar
la función que ya tenía y ni de eso fuistes capaz, para luego
proponer un SP. Solo Alejandro y yo hemos propuesto una
función (como deseaba el OP) y una tabla 'Calendario'.

Alejandro puso como opción una función sobre una tabla Calendario,
para utilizar en una vista. Por qué? Pues porque eso precisamente
era lo que quería el OP. Teniendo la tabla ya no tiene sentido la
función pero, como Alejandro aclaró, le deja la opción al OP.
Por qué digo esto? Son también opciones. Pero tu sin aportar nada
lo único que te interesa es criticar opciones según quien sea el
que las dá.

Qué agenda tienes tu entonces?



2)Usar un Store Procedure el cual en ninguna versión de SS tiene
limitantes
ni para enviarle getdate() como parámetro ni para usar getdate() dentro
de
su lógica. Sin embargo tiene la desventaja que no se puede usar como una
vista o función tipo tabla, es decir, como si fuese una tabla. Pero
claro
que depende del uso que se le vaya a dar ya que si lo que se desea es
simplemente generar la tabla y traer los resultados a la aplicación, el
SP
te basta y sobra.



Usar un SP es la peor de todas las opciones dadas. Y es precisamente
lo que has propuesto tu, desesperado por no encontrar una solución
directa al problema te tenía el OP con la función.
Por que es la peor? Te remito a los conceptos que te he dejado en
otra reacción; pero que ya has demostrado ampliamente en tus últimas
reacciones sobre lo de diseño lógico e implementación que no lo
entiendes. Ni eres digno de más explicaciones.

Malas decisiones a nivel lógico tienen consecuencias muchos mas
graves que los fallos que uno pueda cometer con la implementación.


3) Cambiarte a una versión más reciente de SQL Server que no tenga la
limitación del GetDate() que tienen las funciones de usuario en la
versión
2000. Contrario a lo que sugiere alguien en un mensaje, deben saber que
SS
2008 (que es el que uso actualmente) no tiene esa limitante. Pero creo
que
ya la versión 2005 no la tenía.




Vaya opción! Migrar solo porque se necesita una lista de sábados!
Tus opciones han sido un SP y cambiarase de versión.
Y yo que creía que la del SP era la peor. Brillante!

Yo también tengo una conclusión, que repetiré otra vez para que
los leen este foro y tengan alguna duda (como dices tu) sobre qué
tipo de juego haces tu:

1)
En mi primer reacción he dejado ver al OP como podía conseguir
hacer uso de la función en la vista, como él quería. Y he
propuesto además que podía utilizarla para popular una tabla
'Calendario' para usarla en vez de la función. Por eso es genérica.

En cambio tu has hecho varios intentos de dejarle ver al OP como
tenía que hacer uso de la función que este ya tenía y nada mas.
Repito... sin resultado. Y por eso te cambias a lo del SP.
Entretando el OP parece estar satisfecho con el uso de la
función como él mismo quería.

2)
Entonces Alejandro proponer crear una tabla 'Calendario' y
(repito) por si el OP insiste en una función (que ya no sería
necesaria), pues también se la dá.

3)
Es ahora cuando para ti la opción de una tabla base 'Calendario'
parece ser mejor que todo lo que tu has propuesto. Opción que ya
estaba en mi primer reacción.

4)
Analizando ahora nos vienes a decir que las opciones (otras que
la creación de una tabla base como propone Alejandro) son todas
ridículas, y eso basandose en meros ejemplos que se han puesto
y tratando de ignorar que esa misma opción está también en mi
primer reacción en en este hilo.

Esa es mi conclusión.
Mi primera reacción en el hilo está ahí para quien la quiera leer
detenidamente, que tampoco es tan larga.


Otras conclusiones:

"Sr. Carlos Calvelo ..."
"Sr. Alejandro Mesa ..."

Ufff!
Que se vean otros hilos tuyos donde tratas a los demás como se te
ha tratado ahora a tí. Y tu respuesta es entonces tratar a los demás
de 'Señor' y criticar las propuestas iniciales que alguien ha
hecho para después acabar concluyendo que porque lo dice también
el 'Sr.' Alejandro Mesa entonces sí es lo que hay que hacer.

Ni has podido dar respuesta a la pregunta original del OP (como hago
para poder utilizar la función desde la vista?), ni has propuesto
ninguna alternativa de más valor. Solo se te ha ocurrido proponer
una ruptura de la interfaz con las aplicaciones y usuarios sobre la
que el OP, parece ser, ya había tomado una sabia decisión. Pero
estoy hablando otra vez del modelo lógico y de su implementación
y no espero que lo vayas a entender ahora la diferencia, visto ya
lo visto.

Estás jugando un juego sucio y tu agenda en esto debe de oler
bastante mal. Ya aparte de insultos, realmente das asco.
No es por nada que Alfredo ya te ha metido en (como él dice)
en el filtro de *idiotas*.
Puede seguir distorsionando y distorsionando, pero eso no
cambiará para nada aquello que tratas de distorsionar.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida