CREATE PROCEDURE usp_DataRowCounts ASset ANSI_NULLS ONset QUOTED_IDENTIFIER ON-- Declare local variablesEXEC master..sp_MSForeachdb 'USE [?]IF DB_ID(''?'')>4BEGIN INSERT INTO DBMaint..tblTableDataEXEC sp_MSforeachtable 'sp_spaceused ''?''END'GOCREATE TABLE tblTableData (vchTableName VARCHAR(100) NOT NULL, intRows INT NOT NULL, vchReservedSpace VARCHAR(100) NOT NULL, vchData VARCHAR(100) NOT NULL, vchIndexSize VARCHAR(100) NOT NULL, vchUnusedSpace VARCHAR(100) NOT NULL)
CREATE PROCEDURE usp_DataRowCounts ASset ANSI_NULLS ONset QUOTED_IDENTIFIER ONdeclare csr_db cursor forselect [name] from master..sysdatabaseswhere [dbid] >4declare @cmd varchar(max)declare @dbs varchar(256)open csr_dbfetch next from csr_db into @dbswhile @@fetch_status = 0BEGIN set @cmd = @dbs + '..sp_msforeachtable '' insert into DBMaint..tblTabledata(vchtablename,introws,vchreservedspace,vchData,vchIndexSize,vchUnusedSpace) exec sp_spaceused ''''?'''' ''' exec(@cmd) set @cmd = 'update DBMaint..tblTabledata set vchdatabasename = ''' + @dbs + ''' where vchdatabasename is null' exec(@cmd) fetch next from csr_db into @dbsENDclose csr_dbdeallocate csr_db
CREATE TABLE tblTableData (vchdatabasename varchar(256) NULL, vchTableName VARCHAR(100) NOT NULL, intRows INT NOT NULL, vchReservedSpace VARCHAR(100) NOT NULL, vchData VARCHAR(100) NOT NULL, vchIndexSize VARCHAR(100) NOT NULL, vchUnusedSpace VARCHAR(100) NOT NULL)
USE masterGOSET STATISTICS IO, TIME OFFSET NOCOUNT ONSET IMPLICIT_TRANSACTIONS ONGOIF OBJECT_ID('dbo.spaceused', 'U') IS NULL BEGIN CREATE TABLE dbo.spaceused ( DbName sysname DEFAULT(''), tblName sysname, Row_count INT , Reserved VARCHAR(50), data VARCHAR(50) , index_size VARCHAR(50), unused VARCHAR(50), PRIMARY KEY CLUSTERED (DbName, tblName) ); ENDELSE BEGIN --DROP TABLE dbo.spaceused TRUNCATE TABLE dbo.spaceused ENDCOMMITGODECLARE @Cmd VARCHAR(8000)SET @Cmd = 'USE [?]; IF ''?'' NOT IN (''tempdb'' --, ''master'', ''model'', ''msdb'' )BEGIN--PRINT ''?''DECLARE @InnerCmd VARCHAR(8000)SET @InnerCmd = '' EXEC sp_spaceused '''''' + CHAR(63) + '''''''' INSERT INTO master.dbo.spaceused(tblName, Row_count,Reserved,data,index_size,unused) EXEC sp_MSforeachtable @InnerCmd UPDATE master.dbo.spaceused SET DbName = ''?'' WHERE DbName = ''''END'--PRINT @Cmd--EXEC sp_MSforeachtable @CmdEXEC sp_MSforeachdb @CmdSELECT DbName , tblName , Row_count , CONVERT(BIGINT, REPLACE(Reserved, ' KB', '')) / 1024 AS MB_Reserved , CONVERT(BIGINT, REPLACE(data, ' KB', '')) / 1024 AS MB_data , CONVERT(BIGINT, REPLACE(index_size, ' KB', '')) / 1024 AS MB_index_size , CONVERT(BIGINT, REPLACE(unused, ' KB', '')) / 1024 AS MB_unusedFROM dbo.spaceusedWHERE Row_count > 0ORDER BY DbName , MB_Reserved DESC , Row_count DESCCOMMIT