如何獲取SQL Server資料庫裡表的佔用容量大小(轉)
阿新 • • 發佈:2019-01-05
其實只要使用系統內建的儲存過程sp_spaceused就可以得到表的相關資訊
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(@tablename) andOBJECTPROPERTY(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
如:sp_spaceused 'tablename'
以下是為了方便寫的一個儲存過程,目的是把當前的所有表的相關資訊全部都儲存在一個指定的表裡面
CREATEPROCEDURE get_tableinfo ASifnotexists (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
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
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