--定义表变量
--定义表变量
DECLARE @T TABLE
(
[Name] VARCHAR(max),
[Rows] INT,
[Reserved] VARCHAR(max),
[Data_size] VARCHAR(max),
[Index_size] VARCHAR(max),
[Unused_size] VARCHAR(max)
)
--将表占用情况存放到表变量
INSERT INTO @T
EXEC sp_MSforeachtable "exec sp_spaceused '?'"
SELECT [Name] AS [表名],
[Rows] AS [行数],
[Reserved] AS [全部大小_kb],
[Data_size] AS [数据大小_kb],
[Index_size] AS [索引大小_kb],
[Unused_size] AS [剩余大小_kb],
CAST(REPLACE([Reserved],'KB','') AS INT)/1024 AS [全部大小_mb],
CAST(REPLACE([Data_size],'KB','') AS INT)/1024 AS [数据大小_mb],
CAST(REPLACE([Index_size],'KB','') AS INT)/1024 AS [索引大小_mb],
CAST(REPLACE([Unused_size],'KB','') AS INT)/1024 AS [剩余大小_mb]
FROM @T
order by CAST(REPLACE(reserved,'KB','') AS INT) desc
查看 SQL Server 数据库中每个表的占用空间大小,并按从大到小的顺序排序
SELECT
t.NAME AS TableName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
WHERE
t.NAME NOT LIKE 'dt%'
AND t.is_ms_shipped = 0
AND i.OBJECT_ID > 255
GROUP BY
t.NAME, p.Rows
ORDER BY
TotalSpaceKB DESC;