Ayuda para un novato.

24/02/2007 - 11:38 por Enrique | Informe spam
Hola a todos.

Estoy comenzando a usar los procedimientos almacenados, los estoy
ejecutando desde fox, pasandole algunos parametros.

La pregunta es porque si ejecuto un procedimiento pasandole parametros se
trada el doble de tiempo, que si lo ejecutara sin pasarle parametros, es
decir con valores fijos

Caso 1
Select * from mitabla where Codigo = @lcCodigo

Caso 2
Select * from mitabla where Codigo = '0001'

Gracias.
 

Leer las respuestas

#1 Enrique
24/02/2007 - 15:12 | Informe spam
Gracias por responder

Este es el Procedimiento Almacenado:

CREATE PROCEDURE imprimir_Balanza @CodEmp Char(3), @LenMin int, @LenMax int,
@CtaIni as Char(20), @CtaFin Char(20), @FecIni Char(8), @Fecfin Char(8) AS
SELECT A.CodCta, A.NomCta, A.TipSal as Tipo, (case when CtaDetalle = 1 then
'S' else 'N' end) as TipCta,
(case when TipSal = 'D' then
(SELECT SUM(B.Cargo-B.Abono) FROM dbo.DetPartida B WHERE CodEmp = @CodEmp
and LEFT(RTrim(B.CodCta), len(rtrim(A.CodCta))) = Rtrim(A.CodCta) and FecPda
< @FecIni)
else
(SELECT SUM(B.Abono-B.Cargo) FROM dbo.DetPartida B WHERE CodEmp = @CodEmp
and LEFT(RTrim(B.CodCta), len(rtrim(A.CodCta))) = Rtrim(A.CodCta) and FecPda
< @FecIni)
end) as SldAnt,
(Select Sum(B.Cargo) FROM dbo.DetPartida B WHERE CodEmp = @CodEmp and
LEFT(RTrim(B.CodCta), len(rtrim(A.CodCta))) = Rtrim(A.CodCta) and FecPda >=
@FecIni and FecPda <= @FecFin) as Cargos,
(Select Sum(B.Abono) FROM dbo.DetPartida B WHERE CodEmp = @CodEmp and
LEFT(RTrim(B.CodCta), len(rtrim(A.CodCta))) = Rtrim(A.CodCta) and FecPda >=
@FecIni and FecPda <= @FecFin) as Abonos
FROM dbo.Catalogo A WHERE CodEmp = @CodEmp and Rtrim(A.CodCta) >= @CtaIni
and Rtrim(A.CodCta) <= @CtaFin and len(rtrim(A.CodCta)) >= @LenMin and
len(rtrim(A.CodCta)) <= @LenMax
GO

uso SQL 2000, auque podria usar el 2005 Express. Y estoy usando fox 9.0 Sp1.

Asi lo llamo desde fox:
lnConn = SQLCONNECT("GeoDNS",'GeoUser','GeoUser')
SET DATE ANSI

lcCommand = "Exec Imprimir_Balanza '"+Parametros.CodEmp+"',
"+ALLTRIM(STR(thisform.txtLongMin.Value))+", "+;

ALLTRIM(STR(thisform.txtLonMax.Value))+",
'"+ALLTRIM(thisform.txtCtaIni.Value)+"',
'"+ALLTRIM(thisform.txtCtaFin.Value)+"','20"+;

+ALLTRIM(STRTRAN(DTOC(Parametros.FecFin-DAY(Parametros.Fecfin)+1),'.',''))+"',
'20"+ALLTRIM(STRTRAN(DTOC(Parametros.Fecfin),'.',''))+"'"

SET DATE DMY

SQLEXEC(lnConn, lcCommand, 'ltBalanza')

SQLDISCONNECT(lnConn)

La finalidad del formulario es imprimir una balanza de comprobación, en un
sistema de contablididad, te agradeceré mucho tu respuesta, pues me
preocupan mucho los tiempos de respuestas del sistema.

Debo aclarar que siempre he usado subrutinas propias de fox, pero alguien me
recomendo que usara procedimientos almacenados para mejorar los tiempos de
respuesta, pero la subrutina original de fox se tarda 25 seg. y el
procedimiento de tarda 53 seg. y el volumen de datos que espero será
muchicimo mayor que con el que estoy probando actualmente.



Gracias.


"Alejandro Mesa" escribió en el
mensaje news:
Hola Enrique,

- Puedes postear el procedimiento almacenado y como lo estas llamando?
- Que version de SQL Server estas usando?
- Como lo llamas desde foxpro?

AMB

"Enrique" wrote:

Hola a todos.

Estoy comenzando a usar los procedimientos almacenados, los estoy
ejecutando desde fox, pasandole algunos parametros.

La pregunta es porque si ejecuto un procedimiento pasandole parametros
se
trada el doble de tiempo, que si lo ejecutara sin pasarle parametros, es
decir con valores fijos

Caso 1
Select * from mitabla where Codigo = @lcCodigo

Caso 2
Select * from mitabla where Codigo = '0001'

Gracias.



Preguntas similares