LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

SQL Server中查询数据库的大小和数据库中各表的大小

admin
2018年12月22日 0:49 本文热度 3779

如果只是查询数据库的大小的话,直接使用以下语句即可:

exec sp_spaceused

为了保证查询结果的实时性,推荐使用 @updateusage 参数来确保统计数据是最新的:

exec sp_spaceused @updateusage = N'TRUE';

执行完毕后结果是两个表,第一个表中包含了基本的统计信息,第二个表示更加详细的数据占用情况。


如果想具体查询某个表的大小,加上表名即可:

exec sp_spaceused 'spt_values'

结果很简单:



其实吧,能查一张表,就想怎么能把数据库里的表都查出来。。。

-- =============================================

-- 描  述:更新查询数据库中各表的大小,结果存储到数据表中

-- =============================================

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

select * from temp_tableSpaceInfo

嗯,应该就可以了吧。


如果不想创建存储过程,也可以直接用下面的SQL语句查询:

select

object_name(id) tablename,

8*reserved/1024/1024 reserved,

rtrim(8*dpages/1024)+'MB' used,

8*(reserved-dpages)/1024 unused,

8*dpages/1024-rows/1024*minlen/1024 free,

rows

--,*

from sysindexes

where indid=1

order by rows desc


该文章在 2024/2/23 10:23:44 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved