Мне нужно знать, сколько дискового пространства используется таблицей в SQL Server.

Я думаю, что большинство людей знают, как это сделать через графический интерфейс (таблица, щелкнув правой кнопкой мыши, свойства), но делать это в T-SQL совершенно бесполезно.

Ответов (3)

Решение
СОЗДАТЬ ТАБЛИЦУ #tmpSizeChar (
     table_name sysname,
     row_count int,
     reserved_size varchar (50),
     data_size varchar (50),
     index_size varchar (50),
     unused_size varchar (50))                              

СОЗДАТЬ ТАБЛИЦУ #tmpSizeInt (
     table_name sysname,
     row_count int,
     reserved_size_KB целое,
     data_size_KB int,
     index_size_KB int,
     unused_size_KB целое)   

ВКЛЮЧИТЬ NOCOUNT
ВСТАВИТЬ #tmpSizeChar
EXEC sp_msforeachtable 'sp_spaceused' '?' ''     

ВСТАВИТЬ В #tmpSizeInt (
        table_name,
        row_count,
        зарезервированный_размер_КБ,
        data_size_KB,
        index_size_KB,
        unused_size_KB
        )
ВЫБЕРИТЕ [имя_таблицы],
        row_count,
        CAST (SUBSTRING (зарезервированный_размер, 0, PATINDEX ('%%', зарезервированный_размер)) КАК int) зарезервированный_размер,
        CAST (SUBSTRING (размер_данных, 0, PATINDEX ('%%', размер_данных)) AS int) размер_данных,
        CAST (SUBSTRING (размер_индекса, 0, PATINDEX ('%%', размер_индекса)) AS int) размер_индекса,
        CAST (SUBSTRING (unused_size, 0, PATINDEX ('%%', unused_size)) AS int) unused_size
ОТ #tmpSizeChar   

/ *
DROP TABLE #tmpSizeChar
УДАЛИТЬ ТАБЛИЦУ #tmpSizeInt
* /

ВЫБРАТЬ * ИЗ #tmpSizeInt
ЗАКАЗАТЬ ПО зарезервированному размеру_КБ УДАЛЕНИЕ

sp_spaceused tableName

где tableName - это имя таблицы, которую вы хотите узнать ....

Проверьте это, я знаю, что это работает в 2005 году ( документация Microsoft ):

Вот это для базы данных пабов


select *
from pubs.sys.database_files

Возвращает размер и max_size.