Хранимая процедура usp_get_dbstats.
IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N?[dbo].[usp_get_dbstats]?) AND OBJECTPROPERTY(id, N?IsProcedure?) = 1) DROP PROCEDURE [dbo].[usp_get_dbstats] GO SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON GO CREATE PROCEDURE usp_get_dbstats AS DECLARE @DBSTATS_DB char(3) SET @DBSTATS_DB = ?DBA? — Begin callout A PRINT ?DECLARE @cmd nvarchar(1024) ? PRINT ?IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE id = object_id(N? + char(39) + ?[tempdb]..[#tmplg]? + char(39) + ?))? PRINT ?DROP TABLE #tmplg? PRINT ?CREATE TABLE #tmplg? PRINT ?(? PRINT ?DBName varchar(32),? PRINT ?LogSize real,? PRINT ?LogSpaceUsed real,? PRINT ?Status int? PRINT ?)? PRINT ?SELECT @cmd = ? + char(39) + ?dbcc sqlperf (logspace)? + char(39) PRINT ?INSERT INTO #tmplg EXECUTE (@cmd)? — End callout A — Begin callout B PRINT ?IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE id = object_id(N? + char (39) + ?[tempdb]..[#tmp_stats]? + char(39 ) + ?))? PRINT ?DROP TABLE #tmp_stats? PRINT ?CREATE TABLE #tmp_stats (? PRINT ?totalextents int, ? PRINT ?usedextents int,? PRINT ?dbname varchar(40),? PRINT ?logsize real,? PRINT ?logspaceused real? PRINT ?)? PRINT ?go?—End callout B —Begin callout C DECLARE AllDatabases CURSOR FOR SELECT name FROM master..sysdatabases OPEN AllDatabases DECLARE @DB nvarchar(128) FETCH NEXT FROM AllDatabases INTO @DB WHILE (@@FETCH_STATUS = 0) BEGIN PRINT ?USE [? + @DB + ?]? PRINT ?GO? PRINT ?IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE id = object_id(N? + char(39) + ?[tempdb]..[#tmp_sfs]? + char(39) + ?))? PRINT ?DROP TABLE #tmp_sfs? PRINT ?CREATE TABLE #tmp_sfs (? PRINT ?fileid int,? PRINT ?filegroup int, ? PRINT ?totalextents int, ? PRINT ?usedextents int,? PRINT ?name varchar(1024),? PRINT ?filename varchar(1024)? PRINT ?)? PRINT ?go? PRINT ?DECLARE @cmd nvarchar(1024)? PRINT ?SET @cmd=? + char(39) + ?DBCC SHOWFILESTATS? + char(39) PRINT ?INSERT INTO #tmp_sfs EXECUTE(@cmd)? PRINT ?DECLARE @logsize real ? PRINT ?DECLARE @logspaceused real ? PRINT ?SELECT @logsize= logsize FROM #tmplg WHERE dbname = ? + char(39) + @DB + char(39) PRINT ?SELECT @logspaceused = (logsize*logspaceused)/100.0? PRINT ? FROM #tmplg WHERE dbname = ? + char(39) + @DB + char(39) PRINT ?SET @cmd = ? + char(39) + ? INSERT INTO #tmp_stats? + char(39) + ? +? PRINT ? ? + char(39) + ?(totalextents,usedextents, dbname,logsize,logspaceused)? + char(39) + ? +? PRINT ? ? + char(39) + ? SELECT SUM(totalextents), SUM (usedextents),? + char(39) + ? + char(39) + ? + char(39) + @DB + char(39) + ?+ char(39) + ? + char(39) + ?,? + char(39) + ? + ? PRINT ? CAST(@logsize AS varchar) + ? + char(39) + ?,? + char(39) + ? + CAST (@logspaceused AS varchar) +? PRINT ? ? + char(39) + ? FROM #tmp_sfs? + char(39) PRINT ?EXEC sp_executesql @cmd? FETCH NEXT FROM AllDatabases INTO @DB END —(@@FETCH_STATUS = 0) —End callout C —Begin callout D PRINT ?INSERT INTO ? + @DBSTATS_DB + ?.dbo.DBSTATS ? PRINT ? (RECORD_TYPE, DBNAME, DATA_SIZE, DATA_USED, LOG_SIZE, LOG_USED)? PRINT ? SELECT 1,dbname,totalextents*64/1024 , usedextents*64/1024 ,? PRINT ? logsize ,logspaceused FROM #tmp_stats? —End callout D CLOSE AllDatabases DEALLOCATE AllDatabases GO SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON GO