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

#6 Oscar Calvo
01/10/2005 - 13:31 | Informe spam
Hola maxi
Es imposible que tengamos una unica tabla.Como te digo,son tablas de 2
millones de registros y, ademas de por otros temas, el diseño es bueno.
La busqueda ahora mismo la hago haciendo una comparacion, a que te refieres?
"Maxi" escribió en el mensaje
news:
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
#7 Maxi
01/10/2005 - 14:25 | Informe spam
Oscar, a ver: si las tablas contienen el mismo tipo de caso de uso no veo
porque las estas separando, cual es el problema que tengan 2M de registros?
yo tengo tablas con 18M!!


Culminis SQL-Server Speakers (http://latam.culminis.com)

Maxi - Buenos Aires - Argentina
Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Oscar Calvo" escribió en el mensaje
news:
Hola maxi
Es imposible que tengamos una unica tabla.Como te digo,son tablas de 2
millones de registros y, ademas de por otros temas, el diseño es bueno.
La busqueda ahora mismo la hago haciendo una comparacion, a que te
refieres?
"Maxi" escribió en el mensaje
news:
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
#8 Oscar Calvo
01/10/2005 - 15:45 | Informe spam
Tenemos 31 de estas tablas actualmente en el sistema.Necesitamos tener como
minimo los 5 ultimos años, por lo que tendremos 60 tablas (como minimo).Por
tanto llegariamos a tener una tabla con 120 millones de registros en el
mejor de los casos , ya que la idea es logicamente que la empresa
crezca.Podriamos ver otros diseños y maneras de manejar esto pero el caso es
que es una aplicacion en produccion y compleja, y el diseño de la misma no
se puede acometer ahora mismo.
Lo que busco unicamente es una respuesta al tema que planteo al inicio, sin
meterme mas a fondo.Entiendo perfectamente que si cambio toda la aplicacion
para adecuarla nuevamente obtendria muchas mejoras, pero no es posible.
Sabes alguna manera de hacer lo que explico al principio?

Gracias y un saludo.


"Maxi" escribió en el mensaje
news:
Oscar, a ver: si las tablas contienen el mismo tipo de caso de uso no veo
porque las estas separando, cual es el problema que tengan 2M de


registros?
yo tengo tablas con 18M!!


Culminis SQL-Server Speakers (http://latam.culminis.com)

Maxi - Buenos Aires - Argentina
Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Oscar Calvo" escribió en el mensaje
news:
> Hola maxi
> Es imposible que tengamos una unica tabla.Como te digo,son tablas de 2
> millones de registros y, ademas de por otros temas, el diseño es bueno.
> La busqueda ahora mismo la hago haciendo una comparacion, a que te
> refieres?
> "Maxi" escribió en el mensaje
> news:
>> 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
#9 Gustavo Larriera [MVP]
01/10/2005 - 21:27 | Informe spam
Programa algo usando esto:

IF EXISTS(SELECT dato FROM tabla1 WHERE condicion)
ELSE

Segun exista o no el dato en cada tabla, vas construyendo la sentencia SLECT
UNION que necesitas para ejecutar luego dinámicamente.

Gustavo Larriera
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Oscar Calvo" wrote in message
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
#10 Oscar Calvo
02/10/2005 - 00:04 | Informe spam
Perdona Gustavo, pero no te entiendo.
Como puedo hacer el "IF EXISTS(SELECT dato FROM tabla1 WHERE condicion)" si
no se el nombre de "tabla1"?
Es decir, segun el mes en el que este debo buscar en una tabla u otra, y es
por esto por lo que construyo la tabla dinamicamente.
A que te refieres?

Gracias y un saludo.


"Gustavo Larriera [MVP]" escribió en el mensaje
news:#
Programa algo usando esto:

IF EXISTS(SELECT dato FROM tabla1 WHERE condicion)
ELSE

Segun exista o no el dato en cada tabla, vas construyendo la sentencia


SLECT
UNION que necesitas para ejecutar luego dinámicamente.

Gustavo Larriera
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Oscar Calvo" wrote in message
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
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida