找出 Table 的大小

DECLARE @tblname varchar(50)            --資料表名稱(使用者資料表名稱變數)
if exists (select * from dbo.sysobjects
            where id = object_id(N'dbo.#tmpStatics')
              and OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE #tmpStatics   --暫存資料表

CREATE TABLE #tmpStatics (        --建立暫存資料表
  name       varchar(50)  NULL ,  --資料表名稱
  rows       varchar(50)  NULL ,  --資料表現有的資料列數
  reserved   varchar(50)  NULL ,  --資料庫中的物件所配置的空間大小
  data       varchar(50)  NULL ,  --資料所用的空間大小
  index_size varchar(50)  NULL ,  --索引所用的空間大小
  unused     varchar(50)  NULL )  --保留給資料庫中之物件但尚未使用的空間大小
 
DECLARE cur_TableStatics CURSOR FORWARD_ONLY FOR
    SELECT name FROM sysobjects
     WHERE xtype='U' ORDER BY name               --取得使用者資料表名稱
OPEN cur_TableStatics
FETCH NEXT FROM cur_TableStatics
INTO @tblname
  WHILE @@FETCH_STATUS = 0
  BEGIN 
    INSERT #tmpStatics
      EXEC sp_spaceused @tblname,@updateusage = N'TRUE'    --顯示資料表的相關磁碟空間資訊
    FETCH NEXT FROM cur_TableStatics
    INTO @tblname
  END
CLOSE cur_TableStatics
DEALLOCATE cur_TableStatics

SELECT name,rows,
       CONVERT(NUMERIC(18,2),SUBSTRING(reserved,1,LEN(reserved)-2))/1024 AS Reserved, -- MB
       CONVERT(NUMERIC(18,2),SUBSTRING(data,1,LEN(data)-2))/1024 AS Data,
       CONVERT(NUMERIC(18,2),SUBSTRING(index_size,1,LEN(index_size)-2))/1024 AS Index_Siz,
       CONVERT(NUMERIC(18,2),SUBSTRING(unused,1,LEN(unused)-2))/1024 AS Unused
  FROM #tmpStatics
 WHERE rows <> '0'
 ORDER BY Data
 
DROP TABLE #tmpStatics                               --移出暫存資料表

評論: 0 | 引用: 0 | 閱讀: 2074
發表評論
暱 稱: 密 碼:
網 址: E - mail:
驗證碼: 驗證碼圖片
內 容:
本網誌收集各類網路公開的文件,以便於本人和眾多網友們檢索查詢,所有轉載文件之著作所有權皆為原作者或及其發表公司所有,若有不宜刊登之文件,一經告知,本網誌立即下架