none
Coger datos de tabla temporal e insertar en una tabla RRS feed

  • Pregunta

  • Buenas noches.

    Tengo una pequeña duda por la cual procedo a realizar la pregunta , tengo un procedimiento almacenado que me trae 2 datos uno que consiste en la cantidad de trabajadores que se pagan en determinado periodo y la siguiente columna la sumatoria de los que se les procede a cancelar, ahora estos 2 datos que traigo a través de la tabla temporal de mi procedimiento almacenado puedo cogerlos y guardarlos en una tabla mediante una sentencia update en el mismo procedimiento o tendríaque realizar alguna otra acción?.

    ALTER PROCEDURE [DBO].[ANALISISINGRESOCTA]
            @FECHAI DATE
    	, @FECHAF DATE
    AS
    BEGIN
    /* CONTROLAR LA CONCURRENCIA */
    	SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
    	SET LANGUAGE SPANISH;
    	CREATE TABLE #ROLESMEN
    				 (
    				 TOTTARPIC INT
    			   , TOTPAGPIC NUMERIC(18, 4)
    				 );
    	INSERT INTO #ROLESMEN(TOTTARPIC
    						, TOTPAGPIC)
    	
    	SELECT SUM(T.HORAS + T.PRODUCCION + T.DESCUENTO) AS CTAPIC
    		 , SUM(T.HORAS + T.PRODUCCION + T.DESCUENTO) AS TOTAL
    	
    	FROM (SELECT E.EMPL_COD AS COD
    	, E.EMPL_APELL + ' ' + E.EMPL_NOMB AS OBRERO,	
    
    	(SELECT ISNULL(SUM(MOV_VHORA), 0) FROM HIS_MOV_HORA
    	WHERE MOV_CODEMPLEADO = E.EMPL_COD AND MOV_FECHA >= @FECHAI AND MOV_FECHA <= @FECHAF) AS HORAS,
    
    	(SELECT ISNULL(SUM(DES_DESCUENTO), 0) FROM HIS_MOV_DESCUENTO
    	WHERE DES_CODEMPLEADO = E.EMPL_COD AND DES_FECHA >= @FECHAI AND DES_FECHA <= @FECHAF) AS DESCUENTO,
    		
    	(SELECT ISNULL(SUM(MOV_TOTALCOSTO), 0)FROM HIS_MOV_PROD
    	WHERE MOV_CODEMPLEADO = E.EMPL_COD AND MOV_FECHA >= @FECHAI AND MOV_FECHA <= @FECHAF) AS PRODUCCION
    	
    	FROM TBL_EMPLEADO E) AS T INNER JOIN TBL_EMPLEADO AS TBE ON TBE.EMPL_COD = T.COD -- SINTAXIS
    	WHERE TBE.EMPL_NOTA = 'T'
    	GROUP BY T.COD, T.OBRERO
    	ORDER BY T.OBRERO
    	
    	;WITH VISTA AS( SELECT TOTTARPIC,TOTPAGPIC
    	FROM #ROLESMEN),
    	
    	VISTAFINAL AS(  
    	SELECT CASE WHEN TOTTARPIC > 12 THEN TOTTARPIC END AS TOTTARPIC,TOTPAGPIC
    	FROM VISTA)
    
    	SELECT 
    		COUNT(TOTTARPIC) AS TOTTARPIC,
    		SUM(TOTPAGPIC) AS TOTPAGPIC
    		FROM VISTAFINAL
    		WHERE TOTTARPIC IS NOT NULL
    	END

    De antemano agradezco su ayuda y si me podrían guiar a la solución del mismo.

    lunes, 18 de enero de 2021 2:05

Todas las respuestas

  • Hola roberto1390:

    Puedes realizarlo en el mismo procedimiento.

    Update tablaFinal set columna = temp.columna

    from tablaFinal inner join #rolesMen temp on tablaFinal.columnaId = temp.columnaId

    lunes, 18 de enero de 2021 5:55
  • Hola roberto1390:

    Puedes realizarlo en el mismo procedimiento.

    Update tablaFinal set columna = temp.columna

    from tablaFinal inner join #rolesMen temp on tablaFinal.columnaId = temp.columnaId

    UPDATE HIS_ANALISIS_MANO_OBRA SET 
    	HIS_CAN_OBR_PIC = TEMPORAL.TOTTARPIC,
    	HIS_CAN_DOL_PIC = TEMPORAL.TOTPAGPIC
    	FROM HIS_ANALISIS_MANO_OBRA 	
    	INNER JOIN #ROLESMEN TEMPORAL ON HIS_FEC_INI = @FECHAI AND HIS_FEC_FIN=@FECHAF			
    	END
    En este caso realizo el siguiente código para poder actualizar la base pero al ejecutar no me guarda el valor que sale al ejecutar la sentencia, si coloco de mantera manual el valor 1 y 2 al ejecutar se refleja el cambio, habría la posibilidad de almacenar momentáneamente el valor de esas 2 variables y posteriormente usarla en el update?.
    martes, 19 de enero de 2021 16:29
  • Hola Roberto1390:

    Si se puede hacer lo que dices, pero no es el problema.

    La update se ejecuta correctamente, pero la union de los dos conjuntos no es correcta.

    	FROM HIS_ANALISIS_MANO_OBRA 	
    	INNER JOIN #ROLESMEN TEMPORAL ON HIS_FEC_INI = @FECHAI AND HIS_FEC_FIN=@FECHAF	

    @FechaI es una variable que no tiene nada que ver con el conjunto #rolesMen. Lo mismo que @FechaF 

    Ambos conjuntos tienen que tener al menos una columna que permita identificar cada una de las filas de una tabla y la otra, en las cuales coincidan.

    .

    martes, 19 de enero de 2021 20:19