如何獲取SQL Server數據庫里表的占用容量大小
其實只要使用系統內置的存儲過程sp_spaceused就可以得到表的相關信息
如:sp_spaceused 'tablename'
以下是為了方便寫的一個存儲過程,目的是把當前的所有表的相關信息全部都保存在一個指定的表里面
CREATE PROCEDURE get_tableinfo AS if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tablespaceinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) create table; tablespaceinfo --創建結果存儲表 (nameinfo varchar(50) ,; rowsinfo int , reserved varchar(20) ,; datainfo varchar(20); ,; index_size varchar(20) ,; unused varchar(20) ) delete from tablespaceinfo --清空數據表 declare @tablename varchar(255); --表名稱 declare @cmdsql varchar(500) DECLARE Info_cursor CURSOR FOR; select o.namefrom dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsTable') = 1; and o.name not like N'#%%'; order by o.name OPEN Info_cursor FETCH NEXT FROM Info_cursor; INTO @tablename; WHILE @@FETCH_STATUS = 0 BEGIN if exists (select * from dbo.sysobjects where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1) execute sp_executesql; N'insert into tablespaceinfo; exec sp_spaceused @tbname', N'@tbname varchar(255)', @tbname = @tablename FETCH NEXT FROM Info_cursor; INTO @tablename; END CLOSE Info_cursor DEALLOCATE Info_cursor GO
執行存儲過程 exec get_tableinfo
查詢運行該存儲過程后得到的結果 select * from tablespaceinfo; order by cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as int) desc
