估计SQL Server数据库中所有表的大小

时间:2015-01-06 11:54:53

标签: sql-server tsql

我想知道我的SQL Server数据库中哪些表的大小相当大。我找到了一个SQL函数来计算表的估计大小(link),但它不支持为所有可用表列出它。有办法吗?我已经设法在TSQL脚本中编写函数,它确实回答了我的问题,但它并不是最美妙的解决方法。

DECLARE @table_name varchar(100)
DECLARE @tables TABLE (table_name VARCHAR(255), column_list VARCHAR(255));

SELECT * INTO #tmp_tables FROM (
SELECT o.name AS table_name,
    STUFF(
    (
        SELECT ', ' + c.name
        FROM sys.columns AS c
        WHERE c.object_id = o.object_id
        ORDER BY c.column_id
        FOR XML PATH('')
    ), 1, 2, '') AS column_list
FROM sys.objects AS o
WHERE type = 'U') table_names

WHILE (SELECT COUNT(*) FROM #tmp_tables) > 0
BEGIN
SELECT TOP 1 @table_name = table_name FROM #tmp_tables;
print @table_name;
EXEC Sp_spaceused @table_name;
DELETE #tmp_tables where table_name = @table_name;

END
DROP TABLE #tmp_tables;

2 个答案:

答案 0 :(得分:0)

文档说明如果省略参数,Sp_spaceused应该应用于数据库中的所有表。

如果不是这样, 我会MSforeachtable使用iterate through all of tables并在每个Sp_spaceused上调用sp_msforeachtable ' Sp_spaceused ''?'' ' ,然后对结果求和。

{{1}}

答案 1 :(得分:0)

您可以执行此操作是单个查询。查询dm_db_index_physical_stats以获取数据库中所有分区的大小。将其加入其他常用的元数据表,例如sys.indexessys.objects