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

#36 Jose TH
19/11/2008 - 00:19 | Informe spam
Hola Imbécil,



Sigues insultando, entiendo tu frustración por dejar al descubierto el
CREATE VIEW mágico que has propuesto jajajajajaj
Sé que vas a soñar varios días con ese CREATE VIEW.


> Y no le quedaría más que decir que quien la pensó no se le ocurrió que
> hay
>función.



>Ahora es "un ejemplo" que pusiste. Si hasta pusiste "CREATE VIEW".
>Busca
tu propio mensaje y lo verás.



Pone claramente 'podemos *por ejemplo* ...'




Y a quién se le ocurre recomendar siquiera la POSIBILIDAD de un CREATE VIEW
con dos fechas constantes ? Hombre, CJ Date pasó por ti sin saber que pasó
:) realmente lo has leído ?... en serio, si quieres me lo dices en un email
privado como los que mandan por ahí que yo no se lo diré a nadie...


No te sientas mal, entiendo tu enfado y tus insultos.

Nunca me he encontrado mejor y no estoy enfadado.
Y que entiendas los insultos... lo dudo.



Si no estás enfadado pues peor, ya que demuestras que tienes un genio de
policía de tránsito a las 12 meridiano. Hombre ve a terapia para controles
ese genio. Tu familia lo agradecerá.


Cualquiera se puede
equivocar y decir de vez en cuando, o muchas veces :), una barrabasada
como
esa, hombre, no eres infalible.

Por cierto, no sé qué es "cateto" pero gracias, "colega".:)

Está en el diccinario con varios significados.
Me refiero al que no va de geometría.




Pero a ti te va mejor la acepción del de que hablaba Pitágoras, sobre todo
el opuesto. No aspiro a que entiendas eso.. pero...


O "CREATE VIEW" no es para definir una VISTA ?
Si no quisiste decir eso ahora pues estoy seguro de que confundiste
totalmente al OP y a todo el que lo leyó.

Si y todos son ejemplos. Por eso empieza todo con:
"Ahora podemos utilizarla por ejemplo así:"




No hombre, no se vale hacer el ridículo. Admite tu falta y te va mejor,
hasta la "foro-audiencia" termine tomándote respeto. Cómo puedes decir una
cosa tan claramente y negarlo así sin inmutarte? Buenos consejos das a los
que buscan ayuda!


>" La expresión que define la vista es implementación... Nadie ha dicho
>que
>ponga
>2010 en su solución final."

De cuál implementación hablas ?
Por eso tienes que ir a leer un libro.




Si es que para ti implementación es tener que estar pendiente de rediseñar
las vistas con frecuencia. Si CJ Date te lee debe estar con dolor de
estómago de la risa. :)

poner en vez de sólo hasta 2010 poner, por
ejemplo hasta el 2030 ? Es esa tu "implementación" ?

algo asi?:
Supongamos que algo así es tu "implementación". Has pensado en el
performance de esa llamada a esa función para solo sacar los sábados de un
solo año o de un sólo mes ? parece que definitivamente no has pensado en
eso entonces de cuál implementación hablas!
Si he pensando en eso. Y por eso también digo que la función
es genérica para poder ser ulizada en muchos contextos.
Y por eso propongo también utilizarla para generar una
tabla y utilizar la tabla. Imbécil, que no sabes ni leer.




Pues por eso te sugiero que te habrías ahorrado desde un principio ese
fatídico CREATE VIEW, por el que habrás de ser recordado de por vida
jajaja... Yo por lo pronto lo he enviado a todos mis amigos y empleados como
ejemplo de las cosas que NO se deben hacer ni mucho menos sugerir pública ni
privadamente jajajajajaj


Peor de ahí no puede ser. O quien sabe qué es lo que tu entiendes por
"implementación", estar modificando las vistas anualmente ?
Por eso tienes que ir a leer un libro.




Claro, iré a la Wikipedia como tú y tu compañerito. :)


Pues claro que eso es OTRA cosa. Y esa debió ser quizá tu "mejor"
solución,
porque... tabla y vista no es lo mismo, sabías? Tampoco hablaste de "Vista
materializada". Sabías ? :)

Si. Sabía! Por eso propongo usar la función para generar la tabla.




Tienes que estudiar un poco más SQL Server , sin duda. No te culpo, la
Wikipedia causa pereza.


Y tabla y vista a nivel lógico si son lo mismo, borrico. Solo
la implementación es diferente. Vete a leer anda!

Es uno de los principios de los que te he hablado, pero
no te enteras.




Si revisas o lees tu primer mensaje verás cómo confundes lo lógico con lo
físico cuando incluyes la burrada de incluir FECHAS CONSTANTES en la
definición de una vista.
Que buen concepto de nivel LóGICO tiene el que define una vista que ya el
1ero de Enero del 2011 no funciona.
La Wiki está formando una clase de profesionales!!!


Pero para eso no tenías que quemarte las neuronas haciendo una función y
luego salir con el genial "CREATE VIEW" basado en la función con
parámetros
constantes cuyo rango de años va a definirse en la "implementación".
Lo de "implementación" te tiene ocupado eh!?
Ya sabes cual es la solución.




Me disculpas pero debes agradecerme que estoy usando un método para provocar
razonamiento inductivo en ti a ver si terminas reconociendo la barrabasada
que has propuesto y te vuelves humilde por primera vez en tu vida y lo
admites.

Todo por no pensar en un store procedure al cual se le puede pasar como
parámetro getdate() en cualquier versión de SS

Eso también lo puede hacer en una vista en SS2000. Borrico!




Pero dices en tu "VISTA" basada en una función con PARAMETROS FIJOS ???...
jajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajjajajajajajajajajajajajajajaj
...

Me disculpas pero tuve que pausar 10 minutos por la risa que me produjo tu
brillantez para no admitir que un SP se puede usar.

o en su defecto usar la tabla
persistente como también propuso Alejandro.

Lo que propone Alejandro tiene muchísimo mas sentido que lo
que propones tu. Eso es seguro.

Yo he dado la opción de utilizar la función para generar una
tabla. Lee!




Claro, ahora te conviene enfatizar la opción de la función para GENERAR la
tabla. Y el fiasco del CREATE VIEW ??? de eso es que estamos hablando, o ya
lo olvidaste ?



Que quizas el SP no se puede
llamar en un FROM?, para eso están las tablas temporales, eso es por lo
menos mas simple, mas eficiente o mas mantenible que la solucion que das.
Pero nada, me quedo con lo de la tabla calendario que propone Alejandro.


Busca la palabra Calendario en mi primer reacción.

Se te ve el plumero!

>Yo no soy anti nada, imbécil.

Pues ahora dices que no lo eres porque no te conviene decirlo pero crees
que
no estamos hartos de leer todos tus mensajes al respecto y los de tu
apreciado compañerito Novoa, donde insultan a todo el que defiende un
poquito a los store procedures ?

Pues no te has enterado. Criticamos 'cierto' uso de los SP.




Esa es la estrategia para los tontos, para dar supuesta validez a tu
mentalidad anti-sp. En el fondo ustedes son eso: "anti-sp" totalmente
radicales.


Te felicito yo a tí por haberte enterado ahora de lo que ya sabe
todo el mundo desde hace tiempo.




Pues quien no se entera eres tu. Yo hace tiempo , seguro que antes de que
hicieras tu primer programa, que no uso SP's para insertar ni borrar ni
actualizar tablas. Ni tampoco los uso cuando una vista o la tabla directa me
da la necesaria flexiblidad para mis queries. Pero sí los uso para cuando
una consulta requiera algún truco en busca de eficiencia o mantenibilidad
como tablas temporales y eso. Ysobre todo para cuando no procede crear
una vista con un criterio tan simplista y de novato como la barrabasada que
tú propusiste con tu ya famoso CREATE VIEW.





todavía se puede simplificar más. Anda! te lo dejo como tarea no te
preocupes, te perdono el plagio. :)
Pero que imbécil eres chico! Ya dije en el primer post que
era una función genérica, etc etc.

Tarea tienes tu ya bastante. Hala... a leer eh!




Es que a alguien que esté aprendiendo se le perdona que haga un "+1" para
encontrar los sábados. Pero nada, los copiones están por todos lados, hasta
en los foros. Te perdono, no te sientas mal por eso tampoco.
Pero no te esfuerces de más que si piensas que por responder cualquier cosa
llegarás a borrar tu antológico CREATE VIEW, te equivocas jajajajajaj




De nuevo, tus insultos te delatan. Para los demás lectores del foro que
vean de qué es que se tratan tus brillantes argumentos.
Mira quien habla! Eres un desvergonzado después de haberte
comportado tu como te has comportado.
Que tu no entiendas mis 'brillantes argumentos' no los
hace menos 'brillantes' :)




Pareces que a tus brillantes argumentos les ha llegado el apagón :)


Dime en qué página del libro de tu ídolo CJ Date se recomienda que se
defina una vista como esta:

y por que no vas y lo lees tu?




Pues fíjate que me atrevo a apostar a que lo leí mucho antes que ciertas
personas.

O es en la Wikipedia que lo dice?

Hombre, hablando con seriedad, a quién se le ocurre ? y menos recomendarlo
en un foro como este con tanta gente experta.
_LOL Ahora hasta me estás pareciendo gracioso. :)




Ya he visto como te burlas junto a tu compañerito de verdaderos gurúes que
hay en este foro.
Y por si acaso no estoy hablando de mi, siempre me considero como mi nick
anterior, un principiante. Pero hay algunos más principiantes que yo
queriendo aparentar erudición.



Vete tu a recomendar sp's para todo, anda!




Deja ese chantaje. Vete tu a recomendar vistas para todo y sp para nada.
Absolutismo irracional se llama eso.

pasado sin duda ninguna al OP.
'humildemente' dice! No sabes lo que significa la palabra.




Aquí los que siempre empiezan con su actitud prepotente y discrimadora son
ustedes. Yo sólo me limito a responder al nivel a que me respondan.
Aunque si te fijas bien en este hilo, quien se rebaja eres tú con tus
palabras insultantes ya que te hiciste famoso por tu CREATE VIEW, yo no
tengo culpa de eso y de que te la pases insultando dando razón de que no
encuentras ni qué decir.


Todavía estás a tiempo. Y, por cierto, contabilidad es mi otra profesión,
a
mucho orgullo, y no me siento denigrado en lo absoluto por tu
acostumbrada,
discriminadora y maliciosa insinuación.
Pero si no es denigración. Solo que pensé que tendrás que saber
hacer algo bien y quizás sea eso.




También sé pensar mejor la definición de un CREATE VIEW que cierta gente.
Eso lo puedes jurar! :)


Vete a tomar un té que le hará bien a ese mal genio. :)

Acabo ya de tomar ya un par, gracias! Aunque estaba de
muy buen genio.

Pero no dá resultado; sigo pensando que eres un gran imbécil.




Pues igualmente si eso ta hace feliz pero te repito sinceramente, busca
terapia para ese mal carácter que tu familia te lo agradecerá, si es que
tienes.


Espero que entiendas que esta conversación no va a dar mucho
mas de sí. O necesitas que alguien te explique eso también?




No, para mi no es problema. Podemos seguir hasta que quieras. Es importante
para que los que leen no se confundan con el espectáculo de tu CREATE VIEW.
No es por ti pues sé que en el fondo entiendes lo que digo y me das la
razón. Tu problema es que tu orgullo no te permite admitir la barrabasada
del CREATE VIEW que le recomendaste al OP.
Si admites tu error podemos dejarlo aquí y no pasa nada hombre.

Pero por lo menos hasta mañana no puedo seguir porque aquí ya es de noche.
Respuesta Responder a este mensaje
#37 Jose TH
19/11/2008 - 00:24 | Informe spam
Pero eso no fue lo que le respondiste a Juan Diego. Seguro que todo el que
te leyó pensó lo mismo.

Revisa tu mensaje o mejora tu redacción. Tienes que tratar de escribir con
más precisión o documentarte mejor, ya que le estás haciendo un mal servicio
a un foro donde entran personas buscando sanamente ayuda de cosas que
desconocen.

Imagínate que el OP o cualquier otro con la misma duda lea eso que tu
escribes en tu involuntaria ignorancia. Si no es porque yo les aclaro que
eso ya está resuelto en las nuevas versiones pues qué va a pasar? que
pensarán que eso no se puede y hasta "mueren pensando eso", claro sin
alusiones personales claro.. :)





"Carlos M. Calvelo" escribió en el mensaje
news:
On 18 nov, 23:22, "Jose TH" <>>> wrote:
>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.

Para los demás que leen el foro y quieran estar mejor enterados sepan que
en
las versiones 2008 (y creo que en 2005 también) ya eso no es así para
GETDATE, por lo menos.




Y GETDATE seguirá siendo una función 'nondetermistic', lo
cual no es *realmente* una función.
Pero eso no está en la ayuda. Borrico!
Respuesta Responder a este mensaje
#38 Carlos M. Calvelo
19/11/2008 - 00:37 | Informe spam
On 19 nov, 00:19, "Jose TH" <>>> wrote:
>Hola Imbécil,

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>
Respuesta Responder a este mensaje
#39 Carlos M. Calvelo
19/11/2008 - 00:45 | Informe spam
On 19 nov, 00:24, "Jose TH" <>>> wrote:

<bla bla bla>

Imagínate que el OP o cualquier otro con la misma duda lea eso que tu
escribes en tu involuntaria ignorancia.  Si no es porque yo les aclaro que
eso ya está resuelto en las nuevas versiones pues qué va a pasar?



Ufff Imagínate!!! Que todos fueran tan tontaina como tu!
Menos mal que estabas tu aquí para salvarlos a todos
de esa condena!

Eres ridículo total!
Respuesta Responder a este mensaje
#40 Jose TH
19/11/2008 - 00:58 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida