问题 我需要知道一个表在SQL Server中使用了多少磁盘空间


我想大多数人都知道如何通过GUI(右键单击表,属性)来做到这一点,但是在T-SQL中完成此操作完全不错。


3904
2017-08-05 19:10


起源



答案:


CREATE TABLE #tmpSizeChar(
     table_name sysname,
     row_count int,
     reserved_size varchar(50),
     data_size varchar(50),
     index_size varchar(50),
     unused_size varchar(50))

CREATE TABLE #tmpSizeInt(
     table_name sysname,
     row_count int,
     reserved_size_KB int,
     data_size_KB int,
     index_size_KB int,
     unused_size_KB int)

设置NOCOUNT ON
INSERT #tmpSizeChar
EXEC sp_msforeachtable'sp_spaceused''?'''

INSERT INTO #tmpSizeInt(
        TABLE_NAME,
        ROW_COUNT,
        reserved_size_KB,
        data_size_KB,
        index_size_KB,
        unused_size_KB
        )
SELECT [table_name],
        ROW_COUNT,
        CAST(SUBSTRING(reserved_size,0,PATINDEX('%%',reserved_size))AS int)reserved_size,
        CAST(SUBSTRING(data_size,0,PATINDEX('%%',data_size))AS int)data_size,
        CAST(SUBSTRING(index_size,0,PATINDEX('%%',index_size))AS int)index_size,
        CAST(SUBSTRING(unused_size,0,PATINDEX('%%',unused_size))AS int)unused_size
来自#tmpSizeChar

/ *
DROP TABLE #tmpSizeChar
DROP TABLE #tmpSizeInt
* /

SELECT * FROM #tmpSizeInt
ORDER BY reserved_size_KB DESC

11
2017-08-05 19:11



那很完美。正是我需要的。谢谢!对OP来说是好的,将其标记为正确的答案。 - Andrew


答案:


CREATE TABLE #tmpSizeChar(
     table_name sysname,
     row_count int,
     reserved_size varchar(50),
     data_size varchar(50),
     index_size varchar(50),
     unused_size varchar(50))

CREATE TABLE #tmpSizeInt(
     table_name sysname,
     row_count int,
     reserved_size_KB int,
     data_size_KB int,
     index_size_KB int,
     unused_size_KB int)

设置NOCOUNT ON
INSERT #tmpSizeChar
EXEC sp_msforeachtable'sp_spaceused''?'''

INSERT INTO #tmpSizeInt(
        TABLE_NAME,
        ROW_COUNT,
        reserved_size_KB,
        data_size_KB,
        index_size_KB,
        unused_size_KB
        )
SELECT [table_name],
        ROW_COUNT,
        CAST(SUBSTRING(reserved_size,0,PATINDEX('%%',reserved_size))AS int)reserved_size,
        CAST(SUBSTRING(data_size,0,PATINDEX('%%',data_size))AS int)data_size,
        CAST(SUBSTRING(index_size,0,PATINDEX('%%',index_size))AS int)index_size,
        CAST(SUBSTRING(unused_size,0,PATINDEX('%%',unused_size))AS int)unused_size
来自#tmpSizeChar

/ *
DROP TABLE #tmpSizeChar
DROP TABLE #tmpSizeInt
* /

SELECT * FROM #tmpSizeInt
ORDER BY reserved_size_KB DESC

11
2017-08-05 19:11



那很完美。正是我需要的。谢谢!对OP来说是好的,将其标记为正确的答案。 - Andrew


看看这个,我知道它在2005年有效(MSDN Doc):

这是pubs DB


select *
from pubs.sys.database_files


0
2017-08-05 19:16





sp_spaceused tableName

其中tableName是您想知道的表的名称....


0
2018-01-14 16:40