加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL Server如何查看所有数据库所有表大小信息

发布时间:2016-08-10 05:11:15 所属栏目:MsSql教程 来源:站长网
导读:一、背景 之前写了篇关于:SQL Server 游标运用:查看一个数据库所有表大小信息(Sizes of All Tables in a Database)的文章,它罗列出某个数据所有表的信息,
一、背景

之前写了篇关于:SQL Server 游标运用:查看一个数据库所有表大小信息(Sizes of All Tables in a Database)的文章,它罗列出某个数据所有表的信息,这些信息包括:表的记录数、数据记录占用空间、索引占用空间、没使用的空间等(如Figure1所示),现在我来讲述如何获取整个数据库实例中所有数据库所有表的信息(如Figure2所示)。

SQL Server如何查看所有数据库所有表大小信息

(Figure1:某数据库所有表信息)

SQL Server如何查看所有数据库所有表大小信息

(Figure2:所有数据库所有表信息)

二、实现方法

下面内容讲述了在实现Figure2过程中遇到的一些问题,如果你对这些问题不感兴趣可以直接看最后实现的SQL脚本。下面讲述了4种实现方法:

1. 游标 + 系统存储过程sp_MSForEachDB,实现脚本为Script3;

2. 封装sp_MSforeachtable + sys.databases,实现脚本为Script4和Script5;

3. 系统存储过程sp_MSForEachDB + sp_MSforeachtable,实现脚本为Script6;

4. 扩展sp_MSforeachdb + sp_MSforeachtable,实现脚本为Script7;

(一) 我们在SQL Server 游标运用:查看一个数据库所有表大小信息(Sizes of All Tables in a Database)的SQL脚本中进行改进,结合sp_MSForEachDB系统存储过程进行实现:

1) 既然有了获取某个数据库所有表信息的脚本,那就可以在外层再套使用sp_MSForEachDB系统存储过程,下面的Script1脚本可以获取到所有数据库的所有表的信息,效果如Figure3所示:

--Script1:
--查看所有数据库所有表信息
EXEC sp_MSForEachDB 'USE [?];
    
DECLARE @tablespaceinfo TABLE (
    nameinfo VARCHAR(50),
    rowsinfo INT,
    reserved VARCHAR(20),
    datainfo VARCHAR(20),
    index_size VARCHAR(20),
    unused VARCHAR(20)
)
    
DECLARE @tablename VARCHAR(255);
    
DECLARE Info_cursor CURSOR FOR
    SELECT ''[''+[name]+'']'' FROM sys.tables WHERE TYPE=''U'';
    
OPEN Info_cursor
FETCH NEXT FROM Info_cursor INTO @tablename
    
WHILE @@FETCH_STATUS = 0
BEGIN
    INSERT INTO @tablespaceinfo EXEC sp_spaceused @tablename
    FETCH NEXT FROM Info_cursor
    INTO @tablename
END
    
CLOSE Info_cursor
DEALLOCATE Info_cursor
    
SELECT * FROM @tablespaceinfo
    ORDER BY Cast(Replace(reserved,''KB'','''') AS INT) DESC'

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读