2015-01-06 65 views
0

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

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; 
+1

http://stackoverflow.com/questions/7892334/get-size-of-all-tables-in-database – CodingDefined

回答

0

文档状态Sp_spaceused应该在所有在数据库中的表,如果省略该参数被应用。

如果这是不正确的, 我会用MSforeachtableiterate through all of tables,并呼吁他们每个人Sp_spaceused,再总结的结果。

sp_msforeachtable ' Sp_spaceused ''?'' ' 
0

您可以这样做是单个查询。查询dm_db_index_physical_stats以获取数据库中所有分区的大小。加入到其他通常的元数据表中,如sys.indexessys.objects

+0

我看到它链接到这个问题,这是相当优雅的版本,我正在寻找: http://stackoverflow.com/questions/7892334/get-size-of-all-tables-in-database?lq=1 – Guido

相关问题