-- Schema: C6MartPeriodico -- Stored Procedure: RP_ST_ClientiPtfNonDiv CREATE PROCEDURE [C6MartPeriodico].[RP_ST_ClientiPtfNonDiv] AS BEGIN -- Drop the #temp table if it exists IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp; -- Log esecuzione INSERT INTO LOG_ESECUZIONE_PERIODICO (Nome, Inizio, Nota) VALUES ( 'RP_ST_ClientiPtfNonDiv', GETDATE(), 'Elaborazione Trimestrale' ); -- DECLARE @appo_contratti_l INT; -- SELECT @appo_contratti_l = ISNULL(COUNT(*), 0) FROM [C6StagingPeriodico].[APPO_CONTRATTI_LIMITER]; DECLARE @DataFineTrim VARCHAR(8); SET @DataFineTrim = c6martperiodico.getTrimestre2(GETDATE(), 0); DECLARE @DataClientiPtf VARCHAR(8); select @DataClientiPtf = MAX(DTTrim) from [C6MartPeriodico].[RP_ClientiPtfNonDiv] if(@DataFineTrim<>@DataClientiPtf) begin truncate table [C6MartPeriodico].[RP_ClientiPtfNonDiv] end -- IF (@appo_contratti_l = 0) -- BEGIN SELECT Rete, COD_FISCALE AS Cod_Fiscale, 0.0000 AS Somma_credito INTO #temp FROM C6StagingPeriodico.APPO_CONTRATTI EXCEPT SELECT rete, cod_fiscale, 0.0000 FROM C6MartPeriodico.PATRIMONIO_BF UNION SELECT rete, cod_fiscale, SUM(credito) AS Somma_credito FROM C6MartPeriodico.PATRIMONIO_BF bf INNER JOIN [C6StagingPeriodico].[RP_CatDivPtf] c ON bf.COD_PRODOTTO = c.CatalogueID GROUP BY rete, cod_fiscale HAVING SUM(credito) < 3.00; -- END --ELSE --BEGIN -- SELECT rete, COD_FISCALE AS Cod_Fiscale, 0.0000 AS Somma_credito ---- INTO #temp -- FROM C6StagingPeriodico.APPO_CONTRATTI_LIMITER -- EXCEPT -- SELECT rete, cod_fiscale, 0.0000 FROM C6MartPeriodico.PATRIMONIO_BF -- UNION -- SELECT rete, cod_fiscale, SUM(credito) AS Somma_credito -- FROM C6MartPeriodico.PATRIMONIO_BF bf -- INNER JOIN [C6StagingPeriodico].[RP_CatDivPtf] c ON bf.COD_PRODOTTO = c.CatalogueID -- GROUP BY rete, cod_fiscale -- HAVING SUM(credito) < 3.00; --END; --select * from [C6MartPeriodico].[RP_ClientiPtfNonDiv] INSERT INTO [C6MartPeriodico].[RP_ClientiPtfNonDiv] ([Rete] ,[Chiave_Acn] ,[Codfis] ,[Codman] ,[Dttrim] ,[Credito] ,[Flg_NonDiv]) SELECT t.RETE, t.Cod_Fiscale AS Chiave_ACN, CASE WHEN LEN(t.COD_FISCALE) = 16 THEN t.Cod_Fiscale ELSE '' END AS Codfis, a.COD_MANDATO AS Codman, @DataFineTrim as Dttrim, t.Somma_credito as Credito, 'S' AS Flg_NonDiv -- into #nuovatab FROM #temp t INNER JOIN C6StagingPeriodico.APPO_CONTRATTI a ON t.RETE = a.rete AND t.Cod_Fiscale = a.COD_FISCALE; -- -- Utilizziamo il comando MERGE per sincronizzare i dati tra le due tabelle --MERGE INTO [C6MartPeriodico].[RP_ClientiPtfNonDiv] AS dest --USING #nuovatab AS src --ON dest.rete = src.rete and dest.chiave_ACN= src.chiave_ACN and dest.dttrim=src.dttrim --WHEN MATCHED THEN -- UPDATE SET dest.credito = src.credito, dest.flg_NonDiv = src.flg_NonDiv, dest.AzioneMerge='UPDATE/NO VAR' --WHEN NOT MATCHED BY TARGET THEN -- INSERT (AzioneMerge,Rete, Chiave_ACN, Codfis, Codman, Dttrim, Credito, Flg_NonDiv) VALUES -- ('INSERT',src.Rete, src.Chiave_ACN, src.Codfis, src.Codman, src.Dttrim, src.Credito, src.Flg_NonDiv); -- Log esecuzione UPDATE LOG_ESECUZIONE_PERIODICO SET Fine = GETDATE(), Tipo = 'INSERT', Righe = @@ROWCOUNT WHERE Nome = 'RP_ST_ClientiPtfNonDiv' AND Inizio = ( SELECT MAX(Inizio) FROM LOG_ESECUZIONE_PERIODICO WHERE Nome = 'RP_ST_ClientiPtfNonDiv' ); END;