use master
go
Create or Alter PROCEDURE dbo.ShrinkAllLogs (@dbname SYSNAME = '%')
AS
BEGIN

DECLARE @sqlcmd VARCHAR (MAX) = '';
DECLARE @cr as char =Char (13)
DECLARE @lf as char = Char (10)
SET NOCOUNT ON;


DECLARE @workvar Table (dbname sysname, dbid int, SizeStartInMB numeric(15,2), SizeEndInMB numeric(15,2), Differenca as SizeStartInMB-SizeEndInMB);


WITH filelist
AS
(
    SELECT database_id, TYPE, SIZE * 8.0 / 1024 SIZE
    FROM sys.master_files
)
INSERT INTO @workvar (dbname, dbid, SizeStartInMB)


SELECT 
    name, database_id,
    (SELECT SUM(SIZE) FROM filelist WHERE TYPE = 1 AND filelist.database_id = db.database_id) LogFileSizeMB
FROM sys.databases db
WHERE database_id > 4
AND NAME LIKE @dbname;
 
SELECT @sqlcmd = CONCAT ( @sqlcmd,  'USE [',  d.NAME,  ']; CHECKPOINT; DBCC SHRINKFILE ([',  f.NAME + ']) with no_infomsgs;' ,  @cr,@lf)
FROM sys.databases d,
     sys.master_files f
WHERE d.database_id = f.database_id
      AND d.database_id > 4 -- keine sysfiles
      AND f.type = 1
      AND d.NAME LIKE @dbname;


PRINT @sqlcmd;
EXEC (@sqlcmd);
 


WITH filelist
AS
(
    SELECT database_id, TYPE, SIZE * 8.0 / 1024 SIZE
    FROM sys.master_files
)

UPDATE w
set w.SizeEndInMB = (SELECT SUM(SIZE) FROM filelist WHERE TYPE = 1 AND filelist.database_id = db.database_id)
FROM @workvar w
inner join sys.databases db on w.dbid = db.database_id
WHERE database_id > 4
AND NAME LIKE @dbname
 
SELECT * FROM @workvar ORDER BY dbname
SET NOCOUNT OFF;
END;