CREATE procedure [dbo].[GetAllTableSize] @schema varchar(50) AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; DECLARE @TableName VARCHAR(200) -- Insert statements for procedure here DECLARE tableCursor CURSOR FOR SELECT DISTINCT @schema+'.'+sys.objects.[name] FROM sys.schemas INNER JOIN sys.objects ON sys.schemas.schema_id=sys.objects.schema_id WHERE type='U' AND is_ms_shipped=0 ORDER BY @schema+'.'+sys.objects.[name] -- WHERE is_ms_shipped is Microsoft generated objects FOR READ ONLY --A procedure level temp table to store the results CREATE TABLE #TempTable ( tableName varchar(200), numberofRows varchar(100), reservedSize varchar(50), dataSize varchar(50), indexSize varchar(50), unusedSize varchar(50) ) --Open the cursor OPEN tableCursor --Get the first Record from the cursor FETCH NEXT FROM tableCursor INTO @TableName --Loop until the cursor was not able to fetch WHILE (@@Fetch_Status >= 0) BEGIN --Insert the results of the sp_spaceused query to the temp table INSERT #TempTable EXEC sp_spaceused @TableName --Get the next Record FETCH NEXT FROM tableCursor INTO @TableName END --Close/Deallocate the cursor CLOSE tableCursor DEALLOCATE tableCursor --Select all records so we can use the reults SELECT * FROM #TempTable ORDER BY CAST(SUBSTRING(dataSize,1,LEN(dataSize) - 3) AS int) DESC DROP TABLE #TempTable END