SQL Server如何查看所有数据库所有表大小信息
一、背景
之前写了篇关于:SQL Server 游标运用:查看一个数据库所有表大小信息(Sizes of All Tables in a Database)的文章,它罗列出某个数据所有表的信息,这些信息包括:表的记录数、数据记录占用空间、索引占用空间、没使用的空间等(如Figure1所示),现在我来讲述如何获取整个数据库实例中所有数据库所有表的信息(如Figure2所示)。 (Figure1:某数据库所有表信息) (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' (编辑:云计算网_宿迁站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |