Ayuda : El Store Procedure es mas lento que el TSQL

10/06/2004 - 02:30 por silverchpc | Informe spam
Amigos ayuda porfa que no entiendo el porque de esto:

Si ejecuto esto desde el Query Analizer demora 0.23 segundos

Exec ('UPDATE a SET a.npDiasLaborados = isnull((select
Sum(b.npDiasTrabajados) from NominaProcesada b where b.npCodigo
=a.npCodigo and b.npEmpresa = a.npEmpresa and b.PeriodoAnoa.PeriodoAno and b.PeriodoMes = a.PeriodoMes and b.npTrabajo IN
(''01'',''02'',''04'',''05'',''12'') group by b.npCodigo),0) From
NominaProcesada a where a.npTrabajo =''16'' and a.npFecha=''20040501''
and a.npEmpresa=''06''')

Pero al Usar un Store Procedure Demora mas de 20 minutos !!!!!!
CREATE PROCEDURE sp_ejecutaformula1x1Prueba
@Empresa CHAR(2),
@Trabajo CHAR(2),
@Campo VARCHAR(30),
@Transaccion INT,
@Formula VARCHAR(3000),
@Fecha CHAR(8),
@FechaFin CHAR(8),
@Salida VARCHAR(100) OUTPUT
AS
DECLARE @SP VARCHAR(1000)
DECLARE @Errores VARCHAR(100)

SET @Errores = ''

IF dbo.INSTR(UPPER(@Formula),'@SQL',1) > 0 /*Para los SQL*/
BEGIN
SET @SP = SUBSTRING(@Formula,6,LEN(@Formula)-6)
PRINT @SP
EXEC (@SP) /* Aca se DEMORA UNA ETERNIDAD */
IF (@@Error <> 0) GOTO ERROR_EJECUTAFORMULA
END

FIN:
SET @Salida = @Errores
RETURN

ERROR_EJECUTAFORMULA:
SET @Errores = @Campo + ':' + @Formula
GOTO FIN
GO

Lineas para llamar al SP desde el SQLQA:

declare @Salida varchar(200)
declare @Formula varchar(3000)
set @Formula = '@Sql(UPDATE a SET a.npDiasLaborados = isnull((select
Sum(b.npDiasTrabajados) from NominaProcesada b where b.npCodigo
=a.npCodigo and b.npEmpresa = a.npEmpresa and b.PeriodoAnoa.PeriodoAno and b.PeriodoMes = a.PeriodoMes and b.npTrabajo IN
(''01'',''02'',''04'',''05'',''12'') group by b.npCodigo),0) From
NominaProcesada a where a.npTrabajo =''16'' and a.npFecha=''20040501''
and a.npEmpresa=''06'')'
exec sp_ejecutaformula1x1Prueba
'06','16','npDiasLaborados',0,@Formula,'20040501','20040531',@Salida
print @salida

No se que pasa? sera problema de indices, porque la linea sola si
trabaja rapido?, se puede forzar al uso de un indice?. Ayuda

Gracias Xtian.

Preguntas similare

Leer las respuestas

#1 Gregorio López Rojo
10/06/2004 - 02:53 | Informe spam
En el stored procedure estás ejecutando sql dinámico y para cuestiones de
rendimiento no esto se recomienda.
Desconozco lo que en realidad haría el stored procedure, pero si quieres
rapidez tu stored procedure debería estar diseñado algo así:
CREATE PROCEDURE sp_X
@Empresa CHAR(2),
@Trabajo CHAR(2),
@Fecha CHAR(8)
AS
UPDATE a
SET a.npDiasLaborados = ISNULL((SELECT
SUM(b.npDiasTrabajados)
FROM NominaProcesada b
WHERE b.npCodigo = a.npCodigo AND
b.npEmpresa = a.npEmpresa AND
b.PeriodoAno= a.PeriodoAno AND
b.PeriodoMes = a.PeriodoMes AND
b.npTrabajo IN (''01'',''02'',''04'',''05'',''12'')
GROUP BY b.npCodigo),0)
FROM NominaProcesada a
WHERE a.npTrabajo = @Trabajo AND a.npFecha=@Fecha
AND a.npEmpresa = @Empresa

Saludos.

"Xtian" wrote in message
news:
Amigos ayuda porfa que no entiendo el porque de esto:

Si ejecuto esto desde el Query Analizer demora 0.23 segundos

Exec ('UPDATE a SET a.npDiasLaborados = isnull((select
Sum(b.npDiasTrabajados) from NominaProcesada b where b.npCodigo
=a.npCodigo and b.npEmpresa = a.npEmpresa and b.PeriodoAno> a.PeriodoAno and b.PeriodoMes = a.PeriodoMes and b.npTrabajo IN
(''01'',''02'',''04'',''05'',''12'') group by b.npCodigo),0) From
NominaProcesada a where a.npTrabajo =''16'' and a.npFecha=''20040501''
and a.npEmpresa=''06''')

Pero al Usar un Store Procedure Demora mas de 20 minutos !!!!!!
CREATE PROCEDURE sp_ejecutaformula1x1Prueba
@Empresa CHAR(2),
@Trabajo CHAR(2),
@Campo VARCHAR(30),
@Transaccion INT,
@Formula VARCHAR(3000),
@Fecha CHAR(8),
@FechaFin CHAR(8),
@Salida VARCHAR(100) OUTPUT
AS
DECLARE @SP VARCHAR(1000)
DECLARE @Errores VARCHAR(100)

SET @Errores = ''

IF dbo.INSTR(UPPER(@Formula),'@SQL',1) > 0 /*Para los SQL*/
BEGIN
SET @SP = SUBSTRING(@Formula,6,LEN(@Formula)-6)
PRINT @SP
EXEC (@SP) /* Aca se DEMORA UNA ETERNIDAD */
IF (@@Error <> 0) GOTO ERROR_EJECUTAFORMULA
END

FIN:
SET @Salida = @Errores
RETURN

ERROR_EJECUTAFORMULA:
SET @Errores = @Campo + ':' + @Formula
GOTO FIN
GO

Lineas para llamar al SP desde el SQLQA:

declare @Salida varchar(200)
declare @Formula varchar(3000)
set @Formula = '@Sql(UPDATE a SET a.npDiasLaborados = isnull((select
Sum(b.npDiasTrabajados) from NominaProcesada b where b.npCodigo
=a.npCodigo and b.npEmpresa = a.npEmpresa and b.PeriodoAno> a.PeriodoAno and b.PeriodoMes = a.PeriodoMes and b.npTrabajo IN
(''01'',''02'',''04'',''05'',''12'') group by b.npCodigo),0) From
NominaProcesada a where a.npTrabajo =''16'' and a.npFecha=''20040501''
and a.npEmpresa=''06'')'
exec sp_ejecutaformula1x1Prueba
'06','16','npDiasLaborados',0,@Formula,'20040501','20040531',@Salida
print @salida

No se que pasa? sera problema de indices, porque la linea sola si
trabaja rapido?, se puede forzar al uso de un indice?. Ayuda

Gracias Xtian.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida