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.
Leer las respuestas