1. 程式人生 > >如何獲取SQL Server資料庫裡表的佔用容量大小(轉)

如何獲取SQL Server資料庫裡表的佔用容量大小(轉)

 其實只要使用系統內建的儲存過程sp_spaceused就可以得到表的相關資訊

如:sp_spaceused 'tablename'

以下是為了方便寫的一個儲存過程,目的是把當前的所有表的相關資訊全部都儲存在一個指定的表裡面

CREATEPROCEDURE get_tableinfo AS

ifnotexists (select*from dbo.sysobjects where id =object_id(N'[dbo].[tablespaceinfo]'andOBJECTPROPERTY(id, N'IsUserTable'=1)
createtable  tablespaceinfo                         
--建立結果儲存表
              (nameinfo varchar(50) , 
               rowsinfo 
int , reserved varchar(20) , 
               datainfo 
varchar(20)  , 
               index_size 
varchar(20) , 
               unused 
varchar(20) )


deletefrom tablespaceinfo --清空資料表

declare@tablenamevarchar(255)  --表名稱

declare@cmdsql
varchar(500)

DECLARE Info_cursor CURSORFOR 
select o.name  
from dbo.sysobjects o whereOBJECTPROPERTY(o.id, N'IsTable'=1 
     
and o.name notlike N'#%%'orderby o.name

OPEN Info_cursor

FETCHNEXTFROM Info_cursor 
INTO@tablename 

WHILE@@FETCH_STATUS=0
BEGIN

  
ifexists (select*from dbo.sysobjects where id 
=object_id(@tablenameandOBJECTPROPERTY(id, N'IsUserTable'=1)
  
execute sp_executesql 
         N
'insert into tablespaceinfo  exec sp_spaceused @tbname',
          N
'@tbname varchar(255)',
          
@tbname=@tablename

  
FETCHNEXTFROM Info_cursor 
  
INTO@tablename 
END

CLOSE Info_cursor
DEALLOCATE Info_cursor
GOselect *
from tablespaceinfo 
order by cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as int) desc