[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