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

#41 Jose TH
19/11/2008 - 01:11 | Informe spam
Pues "hombre del CREATE VIEW" :)... mira tu otro mensaje donde confirmas tu
brillante recomendación de la vista:

"Tanto a la consulta como a la definición de la vista <==VES?
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"

Pues otra brillante idea de "nivel lógico" le sugeriste ahí al OP.
Asumamos que tu función de parámetros fechas fijos no fuera lo que es...
jejej (perdona pero es que me sigue siendo risible) sino que realmente fuera
lo que tu supones en tu mal intento, crees que es una buena idea añadirle
esas condiciones EN EL WHERE a la definición de una vista ????????????? y
no a esa? a cualquier vista ?????

No piensas que fuera mejor que esa condición se indicase el el Query que
consulte la vista y no en la definición de ésta?
Qué pasaría si mañana fuesen los domingos y no los sábados ? o si mañana no
fuese a GetDate() sino a una fecha arbitraria? o que no fuese "A" una
fecha sino para un rango de fechas arbitrario ?

Te has fijado lo que has escrito ?
Eso también se aprende leyendo a CJ Date ? o es a la Wiki ?

Vuelve a leerte. Por eso es que te reitero que redactes con más cuidado
para que no confundas a la "foro-audiencia" ya que se supone que respondes
mensajes para ayudar no para desayudar.


Sigues insultando, entiendo tu frustración por dejar al descubierto el

No quieres entender que no se trata de frustración ni enfado.
Es para ver si tu también te das cuenta de lo imbécil que eres.
Por eso lo repito varias veces.
<cortado un monton de aire>




No, si yo no me ofendo porque me llames imbécil ya que estoy muy seguro de
que no lo soy.
También entiendo y te he dicho las razones por las que insultas, hasta te
comprendo y hasta me estás cayendo simpático :)
Pero no olvides la recomendación sobre el mal carácter que me lo agradecerás
de por vida. Es en serio.

Saludos
Respuesta Responder a este mensaje
#42 Carlos M. Calvelo
19/11/2008 - 01:24 | Informe spam
Jose:
<contigo he terminado>

A todos los demás:
Mañana espero una visita de la brigada de 'ética y moral'.
Seguro que tendré que aguantar un par de lecciones.

Saludos,
Carlos
Respuesta Responder a este mensaje
#43 Jose TH
19/11/2008 - 01:37 | Informe spam
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
#44 Pedro
19/11/2008 - 01:52 | Informe spam
José, creo que has hecho un buen aporte.

Saludos
Pedro

<Jose TH >>> escribió en el mensaje
news:

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.

.

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".
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.

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.
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.
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.


Jose TH






Respuesta Responder a este mensaje
#45 Carlos M. Calvelo
19/11/2008 - 11:27 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida