Alguna manera de acceder a los resultados de un exec desde fuera

28/09/2005 - 22:45 por Oscar Calvo | Informe spam
Hola a todos,

Tengo un procedimiento almacenado en el que tengo que hacer una busqueda en
varias tablas hacia atras hasta que encuentre un determinado dato.Las tablas
stan numeradas por meses, por lo que debo crear la consulta dinamicamente y
ejecutarla con un exec.Hasta ahora, componia la consulta de todas las tablas
juntas mediante "union" y la ejecutaba.Esto no es nada optimo,ya que
entonces estoy buscando en todas las tablas,cuando lo que debo hacer es
buscar en la primera, y solo si no lo encuentro,seguir por la siguiente etc.
Es decir hasta ahora hacia
set @consulta='select * from tabla1 where... union 'select * from tabla2
where... ' (como digo en principio no se el nombre de las tablas).
y al final el procedimiento exec(@consulta)
La cosa es que si solo busco en una,como se si me devuelve resultados y que
no debo seguir buscando?
Las tablas son muy pesadas, y este procedimiento tiene mucho uso, por lo que
crear tablas temporales y demas cosas extrañas casi lo descarto.

Como soleis hacer esto vosotros?

Gracias y un saludo.

Preguntas similare

Leer las respuestas

#1 Maxi
29/09/2005 - 14:50 | Informe spam
Hola Oscar, 2 cosas

1) pensar en cursores no es buena idea, los motores de base de datos y sobre
todo SQL estan optimizados para trabajar en conjunto de datos y no registro
a registro

2) El uso de SQL - Dinamico no es buena opcion, estas dejando una enorme
puerta de acceso y bajando considerablemente la seguridad de tus
aplicaciones

Recomendaciones:

No nos des la solucion a tu problema, dinos realmente que debe resolver ese
Query y no como optimizar algo que quizas no sea la solucion ideal para
poder resolver la query. Si nos das la info de que debe resolver el query,
las estructuras de las tablas y algunos datos de ejemplo, seguramente entre
varios de aqui podremos darte una manito :-)


Salu2
Maxi


"Oscar Calvo" escribió en el mensaje
news:
Hola a todos,

Tengo un procedimiento almacenado en el que tengo que hacer una busqueda
en
varias tablas hacia atras hasta que encuentre un determinado dato.Las
tablas
stan numeradas por meses, por lo que debo crear la consulta dinamicamente
y
ejecutarla con un exec.Hasta ahora, componia la consulta de todas las
tablas
juntas mediante "union" y la ejecutaba.Esto no es nada optimo,ya que
entonces estoy buscando en todas las tablas,cuando lo que debo hacer es
buscar en la primera, y solo si no lo encuentro,seguir por la siguiente
etc.
Es decir hasta ahora hacia
set @consulta='select * from tabla1 where... union 'select * from tabla2
where... ' (como digo en principio no se el nombre de las tablas).
y al final el procedimiento exec(@consulta)
La cosa es que si solo busco en una,como se si me devuelve resultados y
que
no debo seguir buscando?
Las tablas son muy pesadas, y este procedimiento tiene mucho uso, por lo
que
crear tablas temporales y demas cosas extrañas casi lo descarto.

Como soleis hacer esto vosotros?

Gracias y un saludo.


Respuesta Responder a este mensaje
#2 Oscar Calvo
29/09/2005 - 21:37 | Informe spam
Hola Maxi,gracias por contestar,

Basicamente,la bbdd de la que hablo contiene tablas mensuales de 2.000.000
de registros aproximadamente, por lo que como tu bien dices los cursores
estan descartados.El tema es que a partir del mes en el que se este, por
ejempo septiembre,debo comenzar una busqueda hacia atras en una tabla hasta
encontrar un valor determinado en una columna.
Es una aplicacion que se ejecuta sin ningun tipo de interaccion con el
usuario por lo que la seguridad en este caso no es un tema problematico.Como
digo, es una aplicacion que lee unos valores de una cola MSMQ (alimentada
por otro proceso)y con esos valores tiene que hacer esta busqueda en un
campo varchar.A partir de ahi la logica de la aplicacion creo que no es
importante
Hasta ahora lo hacemos como decia antes,solo buscamos en los dos meses
anteriores, pero como la mayoria de los casos los encontraria solo buscando
en la primera tabla,creo que podria optimizarla
Que opinais de esto entonces?

Gracias y un saludo.

Maxi" escribió en el mensaje
news:#
Hola Oscar, 2 cosas

1) pensar en cursores no es buena idea, los motores de base de datos y


sobre
todo SQL estan optimizados para trabajar en conjunto de datos y no


registro
a registro

2) El uso de SQL - Dinamico no es buena opcion, estas dejando una enorme
puerta de acceso y bajando considerablemente la seguridad de tus
aplicaciones

Recomendaciones:

No nos des la solucion a tu problema, dinos realmente que debe resolver


ese
Query y no como optimizar algo que quizas no sea la solucion ideal para
poder resolver la query. Si nos das la info de que debe resolver el query,
las estructuras de las tablas y algunos datos de ejemplo, seguramente


entre
varios de aqui podremos darte una manito :-)


Salu2
Maxi


"Oscar Calvo" escribió en el mensaje
news:
> Hola a todos,
>
> Tengo un procedimiento almacenado en el que tengo que hacer una busqueda
> en
> varias tablas hacia atras hasta que encuentre un determinado dato.Las
> tablas
> stan numeradas por meses, por lo que debo crear la consulta


dinamicamente
> y
> ejecutarla con un exec.Hasta ahora, componia la consulta de todas las
> tablas
> juntas mediante "union" y la ejecutaba.Esto no es nada optimo,ya que
> entonces estoy buscando en todas las tablas,cuando lo que debo hacer es
> buscar en la primera, y solo si no lo encuentro,seguir por la siguiente
> etc.
> Es decir hasta ahora hacia
> set @consulta='select * from tabla1 where... union 'select * from tabla2
> where... ' (como digo en principio no se el nombre de las tablas).
> y al final el procedimiento exec(@consulta)
> La cosa es que si solo busco en una,como se si me devuelve resultados y
> que
> no debo seguir buscando?
> Las tablas son muy pesadas, y este procedimiento tiene mucho uso, por lo
> que
> crear tablas temporales y demas cosas extrañas casi lo descarto.
>
> Como soleis hacer esto vosotros?
>
> Gracias y un saludo.
>
>


Respuesta Responder a este mensaje
#3 Oscar Calvo
29/09/2005 - 22:34 | Informe spam
Donde dije:
"El tema es que a partir del mes en el que se este, por
ejempo septiembre,debo comenzar una busqueda hacia atras en una tabla hasta
encontrar un valor determinado en una columna"
Realmete queria decir que debo buscar en varias tablas hasta que encuentre
el registro.Realmente 2.asi en septiembre deberia buscar primero en
septiembre y si no esta,en agosto.
Respuesta Responder a este mensaje
#4 Maxi
30/09/2005 - 23:40 | Informe spam
Hola, como haces la busqueda?


-

"Oscar Calvo" escribió en el mensaje
news:%
Hola Maxi,gracias por contestar,

Basicamente,la bbdd de la que hablo contiene tablas mensuales de 2.000.000
de registros aproximadamente, por lo que como tu bien dices los cursores
estan descartados.El tema es que a partir del mes en el que se este, por
ejempo septiembre,debo comenzar una busqueda hacia atras en una tabla
hasta
encontrar un valor determinado en una columna.
Es una aplicacion que se ejecuta sin ningun tipo de interaccion con el
usuario por lo que la seguridad en este caso no es un tema
problematico.Como
digo, es una aplicacion que lee unos valores de una cola MSMQ (alimentada
por otro proceso)y con esos valores tiene que hacer esta busqueda en un
campo varchar.A partir de ahi la logica de la aplicacion creo que no es
importante
Hasta ahora lo hacemos como decia antes,solo buscamos en los dos meses
anteriores, pero como la mayoria de los casos los encontraria solo
buscando
en la primera tabla,creo que podria optimizarla
Que opinais de esto entonces?

Gracias y un saludo.

Maxi" escribió en el mensaje
news:#
Hola Oscar, 2 cosas

1) pensar en cursores no es buena idea, los motores de base de datos y


sobre
todo SQL estan optimizados para trabajar en conjunto de datos y no


registro
a registro

2) El uso de SQL - Dinamico no es buena opcion, estas dejando una enorme
puerta de acceso y bajando considerablemente la seguridad de tus
aplicaciones

Recomendaciones:

No nos des la solucion a tu problema, dinos realmente que debe resolver


ese
Query y no como optimizar algo que quizas no sea la solucion ideal para
poder resolver la query. Si nos das la info de que debe resolver el
query,
las estructuras de las tablas y algunos datos de ejemplo, seguramente


entre
varios de aqui podremos darte una manito :-)


Salu2
Maxi


"Oscar Calvo" escribió en el mensaje
news:
> Hola a todos,
>
> Tengo un procedimiento almacenado en el que tengo que hacer una
> busqueda
> en
> varias tablas hacia atras hasta que encuentre un determinado dato.Las
> tablas
> stan numeradas por meses, por lo que debo crear la consulta


dinamicamente
> y
> ejecutarla con un exec.Hasta ahora, componia la consulta de todas las
> tablas
> juntas mediante "union" y la ejecutaba.Esto no es nada optimo,ya que
> entonces estoy buscando en todas las tablas,cuando lo que debo hacer es
> buscar en la primera, y solo si no lo encuentro,seguir por la siguiente
> etc.
> Es decir hasta ahora hacia
> set @consulta='select * from tabla1 where... union 'select * from
> tabla2
> where... ' (como digo en principio no se el nombre de las tablas).
> y al final el procedimiento exec(@consulta)
> La cosa es que si solo busco en una,como se si me devuelve resultados y
> que
> no debo seguir buscando?
> Las tablas son muy pesadas, y este procedimiento tiene mucho uso, por
> lo
> que
> crear tablas temporales y demas cosas extrañas casi lo descarto.
>
> Como soleis hacer esto vosotros?
>
> Gracias y un saludo.
>
>






Respuesta Responder a este mensaje
#5 Maxi
30/09/2005 - 23:41 | Informe spam
Hola, tienes tablas por meses? si es asi entonces estamos hablando de un
enorme problema de diseño y contra ello se complica que sea eficiente esto!!
por eso es muy pero muy importante tener un buen diseño, si por cada mes
tenes una tabla en lugar de tener una sola con todos los meses puess te
diria: CAMBIA EL DISEÑO!!!


-

"Oscar Calvo" escribió en el mensaje
news:
Donde dije:
"El tema es que a partir del mes en el que se este, por
ejempo septiembre,debo comenzar una busqueda hacia atras en una tabla
hasta
encontrar un valor determinado en una columna"
Realmete queria decir que debo buscar en varias tablas hasta que encuentre
el registro.Realmente 2.asi en septiembre deberia buscar primero en
septiembre y si no esta,en agosto.


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida