Wednesday 4 April 2012

Get All Tables Reserved And Used Sizes.....

CREATE PROC GetAllTableReservedAndUsedSizes
AS
    BEGIN TRY
        DECLARE @table_name VARCHAR(500) ;
        DECLARE @schema_name VARCHAR(500) ;
        DECLARE @tab1 TABLE
            (
              tablename VARCHAR(500) COLLATE database_default ,
              schemaname VARCHAR(500) COLLATE database_default
            ) ;
        DECLARE @temp_table TABLE
            (
              tablename SYSNAME ,
              row_count INT ,
              reserved VARCHAR(50) COLLATE database_default ,
              data VARCHAR(50) COLLATE database_default ,
              index_size VARCHAR(50) COLLATE database_default ,
              unused VARCHAR(50) COLLATE database_default
            ) ;
        INSERT  INTO @tab1
                SELECT  t1.name ,
                        t2.name
                FROM    sys.tables t1
                        INNER JOIN sys.schemas t2 ON ( t1.schema_id = t2.schema_id ) ;  
        DECLARE c1 CURSOR FOR
        SELECT t2.name + '.' + t1.name   FROM sys.tables t1  INNER JOIN sys.schemas t2 ON ( t1.schema_id = t2.schema_id ) ;  
        OPEN c1 ;
        FETCH NEXT FROM c1 INTO @table_name ;
        WHILE @@FETCH_STATUS = 0
            BEGIN 
                SET @table_name = REPLACE(@table_name, '[', '') ;
                SET @table_name = REPLACE(@table_name, ']', '') ;

        -- make sure the object exists before calling sp_spacedused
                IF EXISTS ( SELECT  OBJECT_ID
                            FROM    sys.objects
                            WHERE   OBJECT_ID = OBJECT_ID(@table_name) )
                    BEGIN
                        INSERT  INTO @temp_table
                                EXEC sp_spaceused @table_name, false ;
                    END
       
                FETCH NEXT FROM c1 INTO @table_name ;
            END ;
        CLOSE c1 ;
        DEALLOCATE c1 ;
        SELECT  t1.* ,
                t2.schemaname
        FROM    @temp_table t1
                INNER JOIN @tab1 t2 ON ( t1.tablename = t2.tablename )
        ORDER BY schemaname ,
                t1.tablename ;
    END TRY
    BEGIN CATCH
        SELECT  -100 AS l1 ,
                ERROR_NUMBER() AS tablename ,
                ERROR_SEVERITY() AS row_count ,
                ERROR_STATE() AS reserved ,
                ERROR_MESSAGE() AS data ,
                1 AS index_size ,
                1 AS unused ,
                1 AS schemaname
    END CATCH

No comments:

Post a Comment