Hola amig@s:
Tengo el siguiente SP, probablemente no sea la forma mas optima de hacerlo,
pero creo que resuelve. Lo que hago es crear una tabla temporal donde pongo
uno datos que inmediatmente paso a la tabla INSS_DETALLE, luego borro de
INSS_TEMP, le pongo otros datos y los vuelvo a pasar a INSS_DETALLE. El
asunto los campos SAL-DEVENGADO, SAL-MENSUAL Y APORTE quedan con valores
NULL siempre.
Agradecería de parte de ustedes 2 cosas:
1. ¿como podria cambiar este SP para optimizar su ejecucion?
2. ¿que estoy haciendo mal que me deja los valores que quiero actualizar en
NULL?
3. ¿hay alguna forma de ver la ejecucion de un SP paso a paso?
De antemano muchas gracias por su ayuda.
EDU
CREATE PROCEDURE DBO.PA_PAGOINSS @pdPeriodo DateTime, @psSemana SmallInt,
@psNominaI VarChar(4), @psNominaF Varchar(4) AS
BEGIN TRANSACTION
DELETE FROM OCEXACTUS.DBO.INSS_DETALLE
IF @psSemana=4
INSERT INTO OCEXACTUS.DBO.INSS_DETALLE
SELECT EMPLEADO, ASEGURADO, NOMBRE_PILA, PRIMER_APELLIDO, NOMINA, '01',
@pdPeriodo, 0, 0, 0, '1111',CENTRO_COSTO, 'P'
FROM EXACTUS.MONISA.EMPLEADO
WHERE NOMINA BETWEEN @psNominaI AND @psNominaF AND ACTIVO='S'
ELSE
INSERT INTO OCEXACTUS.DBO.INSS_DETALLE
SELECT EMPLEADO, ASEGURADO, NOMBRE_PILA, PRIMER_APELLIDO, NOMINA, '01',
@pdPeriodo, 0, 0, 0, '11111',CENTRO_COSTO, 'P'
FROM EXACTUS.MONISA.EMPLEADO
WHERE NOMINA BETWEEN @psNominaI AND @psNominaF AND ACTIVO='S'
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'INSS_TEMP')
DROP TABLE INSS_TEMP
CREATE TABLE INSS_TEMP
(
EMPLEADO varchar(10),
MONTO float,
)
INSERT INTO OCEXACTUS.DBO.INSS_TEMP
SELECT EXACTUS.MONISA.EMPLEADO_CONC_NOMI.EMPLEADO,
SUM(EXACTUS.MONISA.EMPLEADO_CONC_NOMI.TOTAL) AS SALDEV
FROM EXACTUS.MONISA.EMPLEADO_CONC_NOMI INNER JOIN
EXACTUS.MONISA.NOMINA_HISTORICO ON EXACTUS.MONISA.EMPLEADO_CONC_NOMI.NOMINA
= EXACTUS.MONISA.NOMINA_HISTORICO.NOMINA AND
EXACTUS.MONISA.EMPLEADO_CONC_NOMI.NUMERO_NOMINA =
EXACTUS.MONISA.NOMINA_HISTORICO.NUMERO_NOMINA
WHERE (EXACTUS.MONISA.NOMINA_HISTORICO.PERIODO = @pdPeriodo) AND
(EXACTUS.MONISA.EMPLEADO_CONC_NOMI.NOMINA BETWEEN @psNominaI AND @psNominaF)
AND (EXACTUS.MONISA.EMPLEADO_CONC_NOMI.CONCEPTO LIKE 'B%')
GROUP BY EXACTUS.MONISA.EMPLEADO_CONC_NOMI.EMPLEADO
UPDATE OCEXACTUS.DBO.INSS_DETALLE
SET [SAL-DEVENGADO] (SELECT MONTO FROM OCEXACTUS.DBO.INSS_TEMP
WHERE OCEXACTUS.DBO.INSS_DETALLE.EMPLEADO=OCEXACTUS.DBO.INSS_TEMP.EMPLEADO)
FROM OCEXACTUS.DBO.INSS_DETALLE,OCEXACTUS.DBO.INSS_TEMP
DELETE FROM OCEXACTUS.DBO.INSS_TEMP
INSERT INTO OCEXACTUS.DBO.INSS_TEMP
SELECT EXACTUS.MONISA.EMPLEADO_CONC_NOMI.EMPLEADO,
SUM(EXACTUS.MONISA.EMPLEADO_CONC_NOMI.TOTAL) AS SALMEN
FROM EXACTUS.MONISA.EMPLEADO_CONC_NOMI INNER JOIN
EXACTUS.MONISA.NOMINA_HISTORICO ON EXACTUS.MONISA.EMPLEADO_CONC_NOMI.NOMINA
= EXACTUS.MONISA.NOMINA_HISTORICO.NOMINA AND
EXACTUS.MONISA.EMPLEADO_CONC_NOMI.NUMERO_NOMINA =
EXACTUS.MONISA.NOMINA_HISTORICO.NUMERO_NOMINA
WHERE (EXACTUS.MONISA.NOMINA_HISTORICO.PERIODO = @pdPeriodo) AND
(EXACTUS.MONISA.EMPLEADO_CONC_NOMI.NOMINA BETWEEN @psNominaI AND @psNominaF)
AND (EXACTUS.MONISA.EMPLEADO_CONC_NOMI.CONCEPTO LIKE 'B%') AND (NOT
(EXACTUS.MONISA.EMPLEADO_CONC_NOMI.CONCEPTO IN ('BG01', 'BQ04', 'BS04')))
GROUP BY EXACTUS.MONISA.EMPLEADO_CONC_NOMI.EMPLEADO
UPDATE OCEXACTUS.DBO.INSS_DETALLE
SET [SAL-MENSUAL] (SELECT MONTO FROM OCEXACTUS.DBO.INSS_TEMP
WHERE OCEXACTUS.DBO.INSS_DETALLE.EMPLEADO=OCEXACTUS.DBO.INSS_TEMP.EMPLEADO)
FROM OCEXACTUS.DBO.INSS_DETALLE,OCEXACTUS.DBO.INSS_TEMP
DELETE FROM OCEXACTUS.DBO.INSS_TEMP
INSERT INTO OCEXACTUS.DBO.INSS_TEMP
SELECT EXACTUS.MONISA.EMPLEADO_CONC_NOMI.EMPLEADO,
SUM(EXACTUS.MONISA.EMPLEADO_CONC_NOMI.TOTAL) AS APORTE
FROM EXACTUS.MONISA.EMPLEADO_CONC_NOMI INNER JOIN
EXACTUS.MONISA.NOMINA_HISTORICO ON EXACTUS.MONISA.EMPLEADO_CONC_NOMI.NOMINA
= EXACTUS.MONISA.NOMINA_HISTORICO.NOMINA AND
EXACTUS.MONISA.EMPLEADO_CONC_NOMI.NUMERO_NOMINA =
EXACTUS.MONISA.NOMINA_HISTORICO.NUMERO_NOMINA
WHERE (EXACTUS.MONISA.NOMINA_HISTORICO.PERIODO = @pdPeriodo) AND
(EXACTUS.MONISA.EMPLEADO_CONC_NOMI.NOMINA BETWEEN @psNominaI AND @psNominaF)
AND (EXACTUS.MONISA.EMPLEADO_CONC_NOMI.CONCEPTO IN
('DQ03','DQ10','DS03','DS10'))
GROUP BY EXACTUS.MONISA.EMPLEADO_CONC_NOMI.EMPLEADO
UPDATE OCEXACTUS.DBO.INSS_DETALLE
SET APORTE (SELECT MONTO FROM OCEXACTUS.DBO.INSS_TEMP
WHERE OCEXACTUS.DBO.INSS_DETALLE.EMPLEADO=OCEXACTUS.DBO.INSS_TEMP.EMPLEADO)
FROM OCEXACTUS.DBO.INSS_DETALLE,OCEXACTUS.DBO.INSS_TEMP
COMMIT TRANSACTIONGO
Leer las respuestas