[SQL Server] Lancer la commande SHRINKFILE sur tous les fichiers Log pour toutes les bases qui possèdent un mode récupération Simple

-- =============================================

-- Author:      KHARROUBI Zouhaier

-- Create date: 28/03/2022

-- Description: Lancer la commande SHRINKFILE sur tous les fichiers Log pour toutes les bases qui possèdent un mode récupération Simple

-- =============================================

DECLARE @Requete   NVARCHAR(MAX)=''

       ,@ExecScript BIT=0

IF @ExecScript=0

       BEGIN

              SELECT CommandeSHRINKFILE_Log FROM (

              SELECT T1.[name] AS NomBase,T2.[name] AS NomLogiqueFichier,T2.[type_desc],N'USE '+QUOTENAME(T1.[name])+' DBCC SHRINKFILE (N'''+ T2.[name] +''', 0, TRUNCATEONLY);'AS CommandeSHRINKFILE_Log

              FROM sys.databases T1

              JOIN sys.master_files T2 ON T2.database_id=T1.database_id AND T2.[type]=1 --Seulement les fichiers Logs

              WHERE T1.[name] NOT IN('master','tempdb','model','msdb')

              AND T1.recovery_model=3    --mode récupération Simple

              ) R1 ORDER BY NomBase,NomLogiqueFichier

       END

ELSE

       BEGIN

              SELECT @Requete= @Requete +' '+ CommandeSHRINKFILE_Log FROM (

              SELECT T1.[name] AS NomBase,T2.[name] AS NomLogiqueFichier,N'USE '+QUOTENAME(T1.[name])+' DBCC SHRINKFILE (N'''+ T2.[name] +''', 0, TRUNCATEONLY);'AS CommandeSHRINKFILE_Log

              FROM sys.databases T1

              JOIN sys.master_files T2 ON T2.database_id=T1.database_id AND T2.[type]=1 --Seulement les fichiers Logs

              WHERE T1.[name] NOTIN('master','tempdb','model','msdb')

              AND T1.recovery_model=3    --mode récupération Simple

              ) R1 ORDERBY NomBase,NomLogiqueFichier

              EXECUTE sp_executesql @Requete

       END