Tuesday 20 August 2013

Find Row Counts of all tables in a Data base

SET NOCOUNT ON
DECLARE @maxid INT,@minid INT =1
DECLARE @IamTemp TABLE( ID INT IDENTITY, table_schema SYSNAME ,table_name SYSNAME)
--declare @resultset TABLE(tablename SYSNAME,rowcnt BIGINT)
declare @resultset TABLE(tablename SYSNAME,rowcnt BIGINT,reserved sysname NULL,[data] sysname NULL,index_size sysname NULL,unused sysname NULL)
INSERT @IamTemp (table_schema,table_name)
SELECT TABLE_SCHEMA,TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
SELECT @maxid = MAX(id) FROM @IamTemp
WHILE(@minid <= @maxid)
BEGIN
DECLARE @tablename SYSNAME
SELECT @tablename =  TABLE_SCHEMA+'.'+TABLE_NAME  FROM @IamTemp WHERE id = @minid
--SELECT @tablename = '['+ TABLE_SCHEMA+'].['+TABLE_NAME+'] ' FROM @IamTemp WHERE id = @minid
--DECLARE @sqlcmd NVARCHAR(2000) = 'SELECT '''+@tablename+'''as Table_name, COUNT(1) FROM ' + @tablename + ' (NOLOCK)' 
--INSERT @resultset(tablename,rowcnt )
DECLARE @sqlcmd NVARCHAR(2000) = 'SP_SPACEUSED  '''+ @tablename  +''''
--print @sqlcmd
INSERT @resultset(tablename,rowcnt,reserved, [data],index_size,unused)
EXECUTE  SP_EXECUTESQL @sqlcmd
--EXECUTE SP_EXECUTESQL @sqlcmd
SET @minid = @minid + 1
END
SELECT * FROM @resultset ORDER BY rowcnt DESC