2015-01-06 2 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 должны применяться на всех таблиц в БД, если параметр не указан.

Если это не так, Я хотел бы использовать MSforeachtable для iterate through all of tables и вызвать Sp_spaceused на каждом из них, а затем суммировать результат.

sp_msforeachtable ' Sp_spaceused ''?'' ' 
0

Вы можете сделать это по одному запросу. Запрос dm_db_index_physical_stats, чтобы получить размер всех разделов в базе данных. Присоедините это к другим обычным таблицам метаданных, таким как sys.indexes и sys.objects.

+0

Я вижу, что это связано с этим вопросом, что довольно элегантная версия того, что я искал: http://stackoverflow.com/questions/7892334/get-size-of-all-tables-in-database?lq=1 – Guido

Смежные вопросы