查看MSSQL數據庫用戶每個表占用的空間大小
最近做項目需要查看數據用戶表的大小,包括記錄條數和占用的磁盤空間數目。在網上找了很久其中查看MSSQL數據庫每個表占用的空間大小相對還可以。
不過它的2、3中方法返回的數據比較多,有些是我們不關心的數據,我在AdventureWorks2012數據上做的測試。其中第二種方法代碼如下:
View Code if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tablespaceinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) delete from tablespaceinfo --清空數據表 declare @tablename varchar(255) --表名稱 declare @cmdsql varchar(500) DECLARE Info_cursor CURSOR FOR OPEN Info_cursor FETCH NEXT FROM Info_cursor WHILE @@FETCH_STATUS = 0 if exists (select * from dbo.sysobjects where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1) FETCH NEXT FROM Info_cursor CLOSE Info_cursor
--itlearner注:顯示表信息 |
運行效果如圖:
很顯然這個返回結果是錯誤的。但是它提供了一種思路,修改后的SQL語句如下:
View Code IF NOT EXISTS ( SELECT * CREATE TABLE #temp --創建結果存儲表 DECLARE @cmdsql NVARCHAR(500) DECLARE Info_cursor CURSOR OPEN Info_cursor FETCH NEXT FROM Info_cursor WHILE @@FETCH_STATUS = 0 CLOSE Info_cursor
UPDATE #temp INSERT INTO dbo.tablespaceinfo
|
運行結果如圖:
同時他的第三種方法返回的數據太多,很多是我們不怎么關心的,原SQL語句如下:
View Code SELECT OBJECT_NAME(id) tablename , |
運行結果如圖:
這里面包含一些索引信息,其實我們只關心表占用磁盤信息,修改后的SQL語句如下:
View Code SELECT OBJECT_NAME(id) tablename , |
運行結果如下:
有不對的地方歡迎大家拍磚!
看了zjeagle的回復很好,于是把他的回復貼在下面:
exec sp_MSForEachTable @precommand=N' create table ##(id int identity,表名 sysname,字段數 int,記錄數 int,保留空間 Nvarchar(10),使用空間 varchar(10),索引使用空間 varchar(10),未用空間 varchar(10))', @command1=N'insert ##(表名,記錄數,保留空間,使用空間,索引使用空間,未用空間) exec sp_spaceused ''?'' update ## set 字段數=(select count(*) from syscolumns where id=object_id(''?'')) where id=scope_identity()', @postcommand=N' select * from ## order by convert(INT,replace(保留空間,"KB","")) desc drop table ##' |
posted on 2013-05-07 10:46 順其自然EVO 閱讀(266) 評論(0) 編輯 收藏 所屬分類: 數據庫