SQL SERVER 2012查询数据库和所有表的大小方法汇总

来源:这里教程网 时间:2026-03-02 12:08:23 作者:

查看某个库和某张表的大小:# sqlcmd -S 192.168.0.1 -U SA -P 'XXXXXXX'1> use test2> go已将数据库上下文更改为 'test'。1> EXEC sp_spaceused2> godatabase_name                                                                                                                    database_size      unallocated space-------------------------------------------------------------------------------------------------------------------------------- ------------------ ------------------test                                                                                                                               358392.19 MB       61140.89 MB      reserved           data               index_size         unused           ------------------ ------------------ ------------------ ------------------303655216 KB       151521704 KB       150348640 KB       1784872 KB       1>2>3>4>5> EXEC sp_spaceused 'owe_test';6> goname                                                                                                                             rows                 reserved           data               index_size         unused           -------------------------------------------------------------------------------------------------------------------------------- -------------------- ------------------ ------------------ ------------------ ------------------owe_test                                                                                                                        23044925             90553168 KB        28877832 KB        61365144 KB        310192 KB        1>  查询test数据库中的所有表的大小 方法1: use test 将数据库上下文更改为 'test'。 CREATE PROCEDURE [dbo].[sp_UpdateTableSpaceInfo] AS BEGIN     --查询是否存在结果存储表     IF NOT EXISTS (SELECT * FROM sysobjects where id = OBJECT_ID(N'temp_tableSpaceInfo') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)     BEGIN         --不存在则创建         CREATE TABLE temp_tableSpaceInfo         (name NVARCHAR(128),         rows char(11),         reserved VARCHAR(18),         data VARCHAR(18),         index_size VARCHAR(18),         unused VARCHAR(18))     END     --清空数据表     DELETE FROM temp_tableSpaceInfo     --定义临时变量在遍历时存储表名称     DECLARE @tablename VARCHAR(255)     --使用游标读取数据库内所有表表名     DECLARE table_list_cursor CURSOR FOR     SELECT name FROM sysobjects     WHERE OBJECTPROPERTY(id, N'IsTable') = 1 AND name NOT LIKE N'#%%' ORDER BY name --打开游标     OPEN table_list_cursor     --读取第一条数据     FETCH NEXT FROM table_list_cursor INTO @tablename     --遍历查询到的表名     WHILE @@FETCH_STATUS = 0     BEGIN         --检查当前表是否为用户表         IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(@tablename) AND OBJECTPROPERTY(id, N'IsUserTable') = 1)         BEGIN             --当前表则读取其信息插入到表格中             EXECUTE sp_executesql N'INSERT INTO temp_tableSpaceInfo EXEC sp_spaceused @tbname', N'@tbname varchar(255)', @tbname = @tablename         END         --读取下一条数据         FETCH NEXT FROM table_list_cursor INTO @tablename     END     --释放游标     CLOSE table_list_cursor     DEALLOCATE table_list_cursor END GO 使用的时候,执行下面的语句: EXEC sp_UpdateTableSpaceInfo; go SELECT * FROM temp_tableSpaceInfo; go 方法2: use test 将数据库上下文更改为 'test'。 declare  @table_spaceused table (name  nvarchar(100) ,rows  int ,reserved  nvarchar(100) ,data  nvarchar(100) ,index_size nvarchar(100) ,unused nvarchar(100) ) insert into @table_spaceused (name,rows,reserved,data,index_size,unused ) exec sp_MSforeachtable @command1='exec sp_spaceused ''?''' select * from @table_spaceused; go

相关推荐