Ver Mensaje Individual
  #5 (permalink)  
Antiguo 22/02/2012, 22:01
Avatar de matanga
matanga
 
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años, 2 meses
Puntos: 85
Respuesta: 2 consultas SQL en una - mayor velocidad

jorge1644, este es el mismo caso del otro post, debes pensar en una única consulta que te devuelva todos los datos y ejecutarla desde el código asp (no recomendado) o como bien dice iislas, ejecutarla desde un procedimiento almacenado, lo que no debes hacer es un loop en asp que ejecute N veces una consulta a la base, supone un ejemplo donde tienes la tabla clientes (id_cliente int, nombre varchar) y la tabla facturas (id_factura, fecha, id_cliente) y quieres obtener los clientes facturados el 1 de enero.

1. Una sola consulta en asp, funciona bien pero no recomendado.

Código:
Set rs1 = ConData.Execute("select 
 cliente.nombre
from 
 clientes 
 inner join facturas 
  on clientes.id_cliente=facturas.id_cliente
where facturas.fecha = '01012012'")

Do While Not rs1.EOF
 Response.Write rs2("nombre")
 rs1.MoveNext
Loop
rs1.Close
2. Dentro de la base, crear un procedimiento con la consulta, y ejecutar el procedimiento desde asp.

Código:
--codigo t-sql
create procedure p1
as
begin
select 
 cliente.nombre
from 
 clientes 
 inner join facturas 
  on clientes.id_cliente=facturas.id_cliente
where facturas.fecha = '01012012'
end
go

--código asp
Set rs1 = ConData.Execute("exec p1")

Do While Not rs1.EOF
 Response.Write rs2("nombre")
 rs1.MoveNext
Loop
rs1.Close
3. Lo que NO debes hacer, un loop en asp que ejecute N consultas.

Código:
Set rs1 = ConData.Execute("select * from facturas fecha = '01012012'") 
Do While Not rs1.EOF
 
 Set rs2 = Server.CreateObject("adodb.RecordSet")
 rs2.Open "select nombre from clientes where id_cliente="&rs1("id_cliente"),ConData,3,3
 Do While Not rs2.EOF
   Response.Write rs2("nombre")
   rs2.MoveNext
 Loop
 rs2.Close

rs1.MoveNext
Loop
rs1.Close
Saludos