查看SQL数据库中每张表所占空间的方法|数据库|码途山海.智隐长卷 -

程序人生|重庆纽新

找回密码
立即注册

QQ登录

只需一步,快速开始

欢迎访问【程序人生-重庆纽新】,本网站为软件开发人员视觉的IT资讯、软件开发中各种问题的解决办法!!
搜索
发新帖


2308

积分

0

好友

259

主题
楼主
发表于 2015-5-13 20:35:54 | 查看: 2541| 回复: 3
  1. IF NOT EXISTS ( SELECT  *
  2.                 FROM    sys.tables
  3.                 WHERE   name = 'tablespaceinfo' )
  4.     BEGIN
  5.         CREATE TABLE tablespaceinfo --创建结果存储表
  6.             (
  7.               Table_Name VARCHAR(50) ,
  8.               Rows_Count INT ,
  9.               reserved INT ,
  10.               datainfo INT ,
  11.               index_size INT ,
  12.               unused INT
  13.             )
  14.     END
  15. DELETE  FROM tablespaceinfo
  16. --清空数据表
  17. CREATE TABLE #temp --创建结果存储表
  18.     (
  19.       nameinfo VARCHAR(50) ,
  20.       rowsinfo INT ,
  21.       reserved VARCHAR(20) ,
  22.       datainfo VARCHAR(20) ,
  23.       index_size VARCHAR(20) ,
  24.       unused VARCHAR(20)
  25.     )
  26. DECLARE @tablename VARCHAR(255)
  27. --表名称
  28. DECLARE @cmdsql NVARCHAR(500)
  29. DECLARE Info_cursor CURSOR
  30. FOR
  31.     SELECT  '[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']' AS Table_Name
  32.     FROM    [INFORMATION_SCHEMA].[TABLES]
  33.     WHERE   TABLE_TYPE = 'BASE TABLE'
  34.             AND TABLE_NAME <> 'tablespaceinfo'
  35. OPEN Info_cursor
  36. FETCH NEXT FROM Info_cursor
  37. INTO @tablename
  38. WHILE @@FETCH_STATUS = 0
  39.     BEGIN
  40.         SET @cmdsql = 'insert into #temp exec sp_spaceused ''' + @tablename
  41.             + ''''
  42.         EXECUTE sp_executesql @cmdsql
  43.         FETCH NEXT FROM Info_cursor
  44. INTO @tablename
  45.     END
  46. CLOSE Info_cursor
  47. DEALLOCATE Info_cursor
  48. GO
  49. --itlearner注:显示数据库信息
  50. --sp_spaceused @updateusage = 'TRUE'
  51. --itlearner注:显示表信息
  52. UPDATE  #temp
  53. SET     reserved = REPLACE(reserved, 'KB', '') ,
  54.         datainfo = REPLACE(datainfo, 'KB', '') ,
  55.         index_size = REPLACE(index_size, 'KB', '') ,
  56.         unused = REPLACE(unused, 'KB', '')
  57. INSERT  INTO dbo.tablespaceinfo
  58.         SELECT  nameinfo ,
  59.                 CAST(rowsinfo AS INT) ,
  60.                 CAST(reserved AS INT) ,
  61.                 CAST(datainfo AS INT) ,
  62.                 CAST(index_size AS INT) ,
  63.                 CAST(unused AS INT)
  64.         FROM    #temp
  65. DROP TABLE #temp
  66. SELECT  Table_Name ,
  67.         Rows_Count ,
  68.         CASE WHEN reserved > 1024
  69.              THEN CAST(reserved / 1024 AS VARCHAR(10)) + 'Mb'
  70.              ELSE CAST(reserved AS VARCHAR(10)) + 'KB'
  71.         END AS Data_And_Index_Reserved ,
  72.         CASE WHEN datainfo > 1024
  73.              THEN CAST(datainfo / 1024 AS VARCHAR(10)) + 'Mb'
  74.              ELSE CAST(datainfo AS VARCHAR(10)) + 'KB'
  75.         END AS Used ,
  76.         CASE WHEN Index_size > 1024
  77.              THEN CAST(index_size / 1024 AS VARCHAR(10)) + 'Mb'
  78.              ELSE CAST(index_size AS VARCHAR(10)) + 'KB'
  79.         END AS index_size ,
  80.         CASE WHEN unused > 1024 THEN CAST(unused / 1024 AS VARCHAR(10)) + 'Mb'
  81.              ELSE CAST(unused AS VARCHAR(10)) + 'KB'
  82.         END AS unused
  83. FROM    dbo.tablespaceinfo
  84. ORDER BY reserved DESC
复制代码


收藏回复 只看该作者 道具 举报


沙发
发表于 2015-5-13 20:37:54
Create Table #Data(name varchar(100),row varchar(100),reserved varchar(100),data varchar(100),index_size varchar(100),unused varchar(100))

回复 只看该作者 道具 举报


板凳
匿名  发表于 2015-5-13 20:59:10
SELECT
TableName = obj.name,
TotalRows = prt.rows,
[SpaceUsed(KB)] = SUM(alloc.used_pages)*8
FROM sys.objects obj
JOIN sys.indexes idx on obj.object_id = idx.object_id
JOIN sys.partitions prt on obj.object_id = prt.object_id
JOIN sys.allocation_units alloc on alloc.container_id = prt.partition_id
WHERE
obj.type = 'U' AND idx.index_id IN (0, 1)
GROUP BY obj.name, prt.rows
ORDER BY TableName

回复 道具


地板
发表于 2015-9-16 17:10:00
--SQL 2000方法:
create table tmp (name varchar(50),rows int,reserved varchar(50),
  data varchar(50),index_size varchar(50),unused varchar(50))
insert into tmp (name,rows,reserved,
  data,index_size,unused) exec sp_msforeachTable @Command1="sp_spaceused '?'"--sp_spaceused 't_vehicle'
select * from tmp order by data desc
drop table tmp

回复 只看该作者 道具 举报

高级模式
B Color Image Link Quote Code Smilies



QQ|小黑屋| 码途山海.智隐长卷 渝ICP备15002301号-2   渝公网安备50011202504426

GMT+8, 2025-5-18 03:29 , Processed in 0.046539 second(s), 25 queries .

©Copyright 程序人生!

©2012-2015重庆纽新

快速回复 返回顶部 返回列表