CREATE PROCEDURE [C6MartPeriodico].[RP_ST_ClientiPtfNonDiv] AS BEGIN exec [dbo].[CreaTabellaBackUp] 'RP_ClientiPtfNonDiv','C6MartPeriodico' -- 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 or @appo_contratti_l = 0) begin truncate table [C6MartPeriodico].[RP_ClientiPtfNonDiv] end drop table if exists #temp CREATE TABLE #temp ( Rete VARCHAR(3), COD_FISCALE VARCHAR(50), Somma_credito [decimal](9, 4) NULL ); IF (@appo_contratti_l = 0) BEGIN insert into #temp SELECT Rete, COD_FISCALE AS Cod_Fiscale, 0.0000 AS Somma_credito 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 insert into #temp SELECT rete, COD_FISCALE AS Cod_Fiscale, 0.0000 AS Somma_credito 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] -- FerAcu 20250509 --delete from [C6MartPeriodico].[RP_ClientiPtfNonDiv] where RETE+Chiave_Acn in (select RETE+COD_FISCALE from #temp ) IF (@appo_contratti_l != 0) Begin delete from [C6MartPeriodico].[RP_ClientiPtfNonDiv] where RETE+Chiave_Acn in (select RETE+COD_FISCALE from C6StagingPeriodico.APPO_CONTRATTI_LIMITER ) End 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 FROM #temp t INNER JOIN C6StagingPeriodico.APPO_CONTRATTI a ON t.RETE = a.rete AND t.Cod_Fiscale = a.COD_FISCALE; -- rimozione duplicati drop table if exists #noDup select distinct * into #noDup from [C6MartPeriodico].[RP_ClientiPtfNonDiv] truncate table [C6MartPeriodico].[RP_ClientiPtfNonDiv] insert into [C6MartPeriodico].[RP_ClientiPtfNonDiv] select * from #noDup -- fine rimozione duplicati -- -- 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;