如何修改SQL语句,查询指定多张表的空间与行数统计信息?
查询指定多张表的统计信息解决方案
没问题,只需要调整原SQL里的表名匹配条件,就能同时查询指定的5张表的统计数据了。下面是修改后的完整语句:
USE myDB GO SELECT t.name AS TableName, s.name AS SchemaName, p.rows AS RowCounts, SUM(a.total_pages) * 8 / 1024 AS TotalSpaceMB, SUM(a.used_pages) * 8 / 1024 AS UsedSpaceMB, (SUM(a.total_pages) - SUM(a.used_pages)) * 8 / 1024 AS UnusedSpaceMB FROM sys.tables t INNER JOIN sys.indexes i ON t.object_id = i.object_id INNER JOIN sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.name IN ('表名1', '表名2', '表名3', '表名4', '表名5') -- 替换成你的5张表实际名称 AND t.is_ms_shipped = 0 AND i.object_id > 255 GROUP BY t.name, s.name, p.rows ORDER BY t.name; GO
关键修改说明:
- 把原语句中
WHERE t.name = ('TestLog')替换成了t.name IN ('表名1', '表名2', ...),通过IN操作符可以一次性指定多个需要查询的表名,用逗号分隔即可。 - 保留了原语句中
t.is_ms_shipped = 0和i.object_id > 255的条件,确保不会查询到系统内置的表。
额外注意事项:
- 如果你的表名包含空格、特殊字符或者数据库开启了大小写敏感,记得用方括号
[]包裹表名,比如[Sales Order]、[User_Log_2024]。 - 确保输入的表名和数据库中实际存在的表名完全一致,否则会过滤掉不存在的表,不会返回对应数据。
内容的提问来源于stack exchange,提问作者600vka
相关产品推荐
相关产品推荐

