Files
sql-scripts/TPDT-268 - ACP in task sequence/dba_storedProcedures/Purge_Synchro_Label.sql
2024-03-07 16:52:14 +01:00

104 lines
2.7 KiB
Transact-SQL

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