Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

2 consultas SQL en una - mayor velocidad

Estas en el tema de 2 consultas SQL en una - mayor velocidad en el foro de SQL Server en Foros del Web. Hola Tengo una tabla de pedidos y he de volver a ella para saber si estamos en el primer pedido o en el segundo ... ...
  #1 (permalink)  
Antiguo 20/02/2012, 07:10
 
Fecha de Ingreso: junio-2010
Mensajes: 60
Antigüedad: 13 años, 10 meses
Puntos: 1
2 consultas SQL en una - mayor velocidad

Hola

Tengo una tabla de pedidos y he de volver a ella para saber si estamos en el primer pedido o en el segundo ... etc.

En access funciona rapido en MS-SQL lentisimo. El problema es que ataco 2 veces a la base de datos rs1 y rs2. Se cual es el problema pero no como se soluciona


Alguien me puede decir como juntar ambas consultas en 1?
creo que sería la sulución. muchas gracias



''' EN LA TABLA FACTURAS RECORRO TODA LA TABLA
Set rs1 = ConData.Execute("Select * From Tabla_Facturas ")
Do While Not rs1.EOF

Response.Write " | " & rs2("Factura_Numero")
Response.Write " | " & rs2("Factura_Codigo_Cliente")
Response.Write " | " & rs2("Factura_Importe")
Response.Write " | " & rs2("Factura_Nombre_Comercial")



''' VUELVO A LA TABLA FACTURAS PARA BUSCAR FACTURAS ANTERIORES EN LA QUE ESTAMOS EN ESTE MOMENTO
ssqlrs2 = "Select distinct Factura_Numero From Tabla_Facturas Where Factura_Codigo_Cliente = '"&rs1("Factura_Codigo_Cliente")&"' And Factura_Numero <> '"&rs1("Factura_Numero")&"' And orderid < "&rs1("orderid")
Set rs2 = Server.CreateObject("adodb.RecordSet")
rs2.Open ssqlrs2,ConData,3,3
If Not rs2.EOF Then
''' HA HABIDO MAS FACTURAS ANTERIORMENTE
ComisionPorCiento = "5%"
Else
''' ES LA PRIMERA FACTURA A ESTE CLIENTE
ComisionPorCiento = "10%"
End If
rs2.Close
Set rs2 = Nothing


Response.Write " LA COMISION DE VENTA PARA EL COMERCIAL ES DEL: " & ComisionPorCiento

rs1.MoveNext
Loop
rs1.Close
Set rs1 = Nothing
  #2 (permalink)  
Antiguo 20/02/2012, 10:54
Avatar de Joch_pa  
Fecha de Ingreso: octubre-2009
Ubicación: Pachuca De Soto, Hidalgo, Mexico, Mexico
Mensajes: 122
Antigüedad: 14 años, 6 meses
Puntos: 7
Respuesta: 2 consultas SQL en una - mayor velocidad

No te serviria mas hacer un conteo de facturas?

Código SQL:
Ver original
  1. SELECT
  2.     Facturas
  3.     , CASE WHEN Facturas > 0 THEN '5%' ELSE '10%' END AS [Porcentaje]
  4. FROM (
  5.     SELECT COUNT(Factura_Numero) AS Facturas
  6.     FROM Tabla_Facturas
  7.     GROUP BY Factura_Codigo_Cliente
  8.     ) A

Checa el resultado de la consulta, y si te sirve
  #3 (permalink)  
Antiguo 20/02/2012, 15:34
 
Fecha de Ingreso: junio-2010
Mensajes: 60
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: 2 consultas SQL en una - mayor velocidad

Muchas gracias
Pero deberia ser codigo asp
La verdad es que no tengo ni idea de codigo en el sql
Gracias de tdas formas ¡
  #4 (permalink)  
Antiguo 20/02/2012, 17:47
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: 2 consultas SQL en una - mayor velocidad

jorge1644, se que tal vez (para usted) sea mejor ejecutar codigo T-SQL desde su aplicativo, pero esta rompiendo con las buenas practicas del desarrollo, ya que estas, sugieren ejecutar STORE PROCEDURE (en la base), en lugar de enviar codigo duro desde su aplicativo.

Esto a la larga, le ahorrara muchos dolores de cabeza
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 22/02/2012, 22:01
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 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
  #6 (permalink)  
Antiguo 23/02/2012, 04:42
Avatar de Joch_pa  
Fecha de Ingreso: octubre-2009
Ubicación: Pachuca De Soto, Hidalgo, Mexico, Mexico
Mensajes: 122
Antigüedad: 14 años, 6 meses
Puntos: 7
Respuesta: 2 consultas SQL en una - mayor velocidad

lo que te mencionan iislas y mantanga es lo ideal, pero si checas lo que te puse, en una sola consulta a la BD te trae el resultado que buscas, osea si existe alguna factura el porcentaje es 5 y si no es del 10%, solo faltaria agregar los campos que necesitas.

Tambien debo preguntar ¿para que nos solicitas ayuda si no pruebas las posibles soluciones que se te dan?

Aclaro, mi resultado tal ves no es el correcto, pero demuestra que desde una sola consulta se pueden obtener resultados sin recurrir constantemente a la BD

Etiquetas: mayor, select, server, sql, tabla, velocidad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:23.