USE [HCITools] GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Purge_Synchro_Label]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[Purge_Synchro_Label] GO USE [HCITools] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[Purge_Synchro_Label] @in_debug int = null, @in_NbMonths int = 3 AS /*============================================================================= Explication du traitement realise par la SP ------------------------------------------- Cette SP sert à supprimer les labels de plus de X jours Contexte d'utilisation ---------------------- Cette SP est appelée par le job D93100 - Purge Synchro Label Parametres ---------- @in_debug : non utilisé @in_NbMonths : nombre de mois glissant à conserver (3 par défaut) Creation : 28.10.16 / FLA Modifications : =============================================================================*/ set nocount on; /*------------------- Declaration des variables --------------------*/ declare @MaxDate bigint, @Directory varchar (255), @Path varchar(500), @FullPath varchar(500) /*------------ Affectation des parametres aux variables ------------*/ SET @MaxDate = CAST(CONVERT(nvarchar(30), DateAdd(mm,-@in_NbMonths,getdate()), 112)+'000000000' as bigint) SELECT @Path = HCIP_value FROM HCITools.dbo.HCI_PARAMS WHERE HCIP_key = 'LBLPATH' /*-------------------------- Traitement ---------------------------*/ BEGIN TRY /* séléction de l'ensemble des répertoires commençant par 20, de format numérique et d'une taille de 17 */ declare c_Directories cursor local forward_only static for SELECT DirectoryName FROM [dbo].[aps_Directory_Get_Directories] (@Path,'20*') where ISNUMERIC(DirectoryName) = 1 AND LEN(DirectoryName) = 17 open c_Directories ; FETCH NEXT FROM c_Directories into @Directory /* Parcour des répertoires */ while @@fetch_status = 0 begin /* Si le répertoire est un répertoire de plus de 3 mois alors on le supprime */ IF CAST(@Directory as bigint) < @MaxDate BEGIN SET @FullPath = @Path + @Directory exec dbo.aps_Directory_Delete @path = @FullPath, @recursive=1 END FETCH NEXT FROM c_Directories into @Directory end close c_Directories deallocate c_Directories /*---------------------- Traitement des erreurs ----------------------*/ END TRY BEGIN CATCH /* Traitement des erreurs (avec RaiseError) */ EXEC dbo.get_Error_Info @in_RaiseError = 1 END CATCH GO