-- Stored procedure --V Transazione gestita a livello applicativo CREATE PROCEDURE [dbo].[HIST_DELETEARCHIVIATI_08102015] AS BEGIN -- Nella tabella temporanea #deleteReport mettiamo tutti i report da cancellare presi dalla tabella generata dalla -- HIST_getReportDaStoricizzare e caricati su nastro (flagArchiviato = 1) select * into #deleteRepFisico from appoDaArchiviare where flagArchiviato = 1 declare @ttlStorico as int set @ttlStorico = 30 --delete dei restorati al passare dei 30 giorni --DELETE FROM dbo.ReportStorico --WHERE IDENTIFICATIVO IN -- (SELECT id -- from dbo.RepositoryStorico WHERE datediff(dd,caricamentoInStorico,getDate()) > @ttlStorico -- ) ----aggiornamento puntamento tabella metadati --UPDATE repositoryMetadati --SET repository = 4 --WHERE repository = 3 and id IN -- (SELECT id -- from dbo.RepositoryStorico WHERE datediff(dd,caricamentoInStorico,getDate()) > @ttlStorico -- ) --Cancellazione report online NON storicizzati --41083 1.57.36 - 1480 0.2.55 --cancellazione com'era prima della fix --DELETE FROM dbo.ReportFisico --WHERE IDENTIFICATIVO IN -- (SELECT IdInRepository -- FROM repositoryMetadati WHERE flagstoricizzato = 1 and flaglock = 0 -- ) --fix per problema lock/timeout -- Nuova delete che sostituissce le query 1 e 2 delete rFisico FROM dbo.ReportFisico rfisico inner join #deleteRepFisico delRep on delRep.idReport = rfisico.identificativo and delRep.repository = 0 ----aggiornamento tabella metadati, mantengo l'informazione di quali report ho cancellato definitivamente. update RepositoryMetadati set flagStoricizzato = 1 where datediff(day,dataGenerazione,getDate()) > 180 and repository = 0 and flaglock = 0 and flagStoricizzato = 0 -- Query 1 --DELETE FROM dbo.ReportFisico --WHERE IDENTIFICATIVO IN -- (SELECT TOP 10000 IdInRepository -- FROM repositoryMetadati a -- join reportFisico b -- on a.idInRepository = b.identificativo -- WHERE flagstoricizzato = 1 and flaglock = 0 and repository = 0 -- ) /* WHILE @@ROWCOUNT>0 DELETE FROM dbo.ReportFisico WHERE IDENTIFICATIVO IN (SELECT TOP 2000 IdInRepository FROM repositoryMetadati a join reportFisico b on a.idInRepository = b.identificativo WHERE flagstoricizzato = 1 and flaglock = 0 and repository = 0 ) --fine fix per problema lock/timeout */ --Cancellazione report online storicizzati 1232 0.02.30 - 56 0.0.3 ---- Query 2 --DELETE FROM dbo.ReportFisico --WHERE IDENTIFICATIVO IN -- ( -- SELECT top 10000 IdInRepository -- FROM repositoryMetadati a -- join reportFisico b -- on a.idInRepository = b.identificativo -- WHERE flagstoricizzato = 1 and repositoryPrestorico = 0 and flaglock = 1 -- ) --Cancellazione report contratto sei -- Sotituisce query 3 delete rFisico FROM dbo.C6ReportFisico rfisico inner join #deleteRepFisico delRep on delRep.idReport = rfisico.identificativo and delRep.repository = 1 -- Query 3 --Cancellazione report contratto sei --DELETE FROM dbo.C6ReportFisico --32363 01.03.02 - 387 0.0.42 --WHERE IDENTIFICATIVO IN -- (SELECT top 10000 IdInRepository--, a.* -- FROM repositoryMetadati a -- join C6ReportFisico b -- on a.idInRepository = b.identificativo -- WHERE flagstoricizzato = 1 and repositoryPrestorico = 1 and flaglock = 1 -- ) --Cancellazione report contratto sei campagna -- sostituisce query 4 delete rFisico FROM dbo.C6ReportFisico rfisico inner join #deleteRepFisico delRep on delRep.idReport = rfisico.identificativo and delRep.repository = 2 -- query 4 --Cancellazione report contratto sei campagna --DELETE FROM dbo.C6ReportFisico_CAMPAGNA --WHERE IDENTIFICATIVO IN -- (SELECT IdInRepository -- FROM repositoryMetadati WHERE flagstoricizzato = 1 and repositoryPrestorico = 2 and flaglock = 1 -- ) --aggiornamento repository tabella dei metadati ------begin transaction rollback --vengono aggiornati i report a lucchetto aperti cancellati update repositoryMetadati set repository = 4 WHERE flagstoricizzato = 1 and repository not in (3,4) -- Archivio tutti i Report che Sono stati archiviati insert into dbo.ReportArchiviati Select *, getDate() from #deleteRepFisico END