sp_executesql y cadena demasiado larga

13/11/2006 - 09:35 por Eva | Informe spam
Hola a Todos

Le estoy dando vueltas a un problemilla que tengo, y cada solución que
intento me doy de narices. Os cuento:

Tengo una aplicación Access (proyecto ADP) tirando de SQL Server 7. Para uno
de los reportes que ofrece la aplicación, tengo una selección de registros
complicadilla, más que nada por la cantidad de tablas que entran en juego y
por la sentencia where que tengo que aplicar, muuuuy variable y que monto
por código.

Hasta ahora lo he solucionado con una vista que me relaciona todas las
tablas, y en un procedimiento almacenado monto una cadena con esta vista (y
alguna fruslería que le hago) y un filtro que pasa como parámetro y forma el
where. Lo ejecuto mediante sp_executesql y le paso los parámetros que hacen
falta.

Todo correcto pero, muy lento :(

Siguiente intento: dividir mi where e irlo aplicando tan pronto (dentro de
mis joins) como pueda para ir restringiendo desde el principio el número de
registros. No problem, puedo ir montando una cadena, aplicando el filtro a
cachitos y, al final, ejecutarla mediante sp_executesql. Hasta aquí todo
bien y montado, pero en algunos casos, la cadena puede pasar de 4000
caracteres y claro, me peta mucho.

¿Alguna sugerencia? Gracias mil

Eva Etxebeste
 

Leer las respuestas

#1 Alejandro Mesa
13/11/2006 - 13:28 | Informe spam
Eva,

Deberas armar varias cadenas con la ejecucion de la sentencia que ejecuta
sp_executesql y ejecutar la concatenacion mediante "exec (c1+c2+...+cn)"

Las virtudes y maldades del SQL dinámico
http://www.hayes.ch/sql/sql_dinamico.html


AMB

"Eva" wrote:

Hola a Todos

Le estoy dando vueltas a un problemilla que tengo, y cada solución que
intento me doy de narices. Os cuento:

Tengo una aplicación Access (proyecto ADP) tirando de SQL Server 7. Para uno
de los reportes que ofrece la aplicación, tengo una selección de registros
complicadilla, más que nada por la cantidad de tablas que entran en juego y
por la sentencia where que tengo que aplicar, muuuuy variable y que monto
por código.

Hasta ahora lo he solucionado con una vista que me relaciona todas las
tablas, y en un procedimiento almacenado monto una cadena con esta vista (y
alguna fruslería que le hago) y un filtro que pasa como parámetro y forma el
where. Lo ejecuto mediante sp_executesql y le paso los parámetros que hacen
falta.

Todo correcto pero, muy lento :(

Siguiente intento: dividir mi where e irlo aplicando tan pronto (dentro de
mis joins) como pueda para ir restringiendo desde el principio el número de
registros. No problem, puedo ir montando una cadena, aplicando el filtro a
cachitos y, al final, ejecutarla mediante sp_executesql. Hasta aquí todo
bien y montado, pero en algunos casos, la cadena puede pasar de 4000
caracteres y claro, me peta mucho.

¿Alguna sugerencia? Gracias mil

Eva Etxebeste






Preguntas similares