본문 바로가기

work/mssql

[MSSQL] 테이블 전체 목록 및 크기(KB) 조회

SET NOCOUNT ON

--정보를 저장할 임시 테이블을 만든다.
CREATE TABLE #TBLSize  
(Tblname varchar(80),
TblRows int,
TblReserved varchar(80),
TblData varchar(80),
TblIndex_Size varchar(80),
TblUnused varchar(80)) ;

DECLARE @DBname varchar(80)
DECLARE @tablename varchar(80)

SELECT @DBname = DB_NAME(DB_ID())
PRINT 'User Table size Report for (Server / Database):   ' + @@ServerName + ' / ' + @DBName
PRINT ''

 

-------커서를 할당하고 오픈후 작업을 시작한다.-------
DECLARE TblName_cursor CURSOR FOR
SELECT NAME
FROM sysobjects
WHERE xType = 'U'


OPEN TblName_cursor

FETCH NEXT FROM TblName_cursor
INTO @tablename

WHILE @@FETCH_STATUS = 0
BEGIN
   INSERT INTO #tblSize(Tblname, TblRows, TblReserved, TblData, TblIndex_Size, TblUnused)
   EXEC Sp_SpaceUsed @tablename
      
-- 다음 항목의 테이블정보를 가져와서 인서트한다.
   FETCH NEXT FROM TblName_cursor
   INTO @tablename
END


CLOSE TblName_cursor
DEALLOCATE TblName_cursor
-------커서작업을 마치고 닫는다.-------


PRINT 'By Size Descending'

-- 1.테이블이 차지하는 용량순으로 출력
SELECT  CAST(Tblname as Varchar(30)) 'Table',
              CAST(TblRows as Varchar(14)) 'Row Count',
              CAST(LEFT(TblReserved, CHARINDEX(' KB', TblReserved)) as int) 'Total Space (KB)',
              CAST(TblData as Varchar(14)) 'Data Space',
              CAST(TblIndex_Size  as Varchar(14)) 'Index Space',
              CAST(TblUnused as Varchar(14)) 'Unused Space'
FROM #tblSize
Order by 'Total Space (KB)' Desc  

 

 


PRINT ''
PRINT 'By Table Name Alphabetical'

-- 2.테이블 이름순으로 출력
SELECT  CAST(Tblname as Varchar(30)) 'Table',
              CAST(TblRows as Varchar(14)) 'Row Count',
              CAST(LEFT(TblReserved, CHARINDEX(' KB', TblReserved)) as int) 'Total Space (KB)',
              CAST(TblData as Varchar(14)) 'Data Space',
              CAST(TblIndex_Size  as Varchar(14)) 'Index Space',
              CAST(TblUnused as Varchar(14)) 'Unused Space'
FROM #tblSize
Order by 'Table'


DROP TABLE #TblSize