表格使用的空间

时间:2012-05-10 15:10:04

标签: sql-server tsql sql-server-2008-r2

此过程是否准确显示了数据库中使用的空间?我怀疑结果。

DECLARE @TableName VARCHAR(100)    --For storing values in the cursor

--Cursor to get the name of all user tables from the sysobjects listing
DECLARE tableCursor CURSOR
FOR 
select [name]
from dbo.sysobjects 
where  OBJECTPROPERTY(id, N'IsUserTable') = 1
FOR READ ONLY

--A procedure level temp table to store the results
CREATE TABLE #TempTable
(
    tableName varchar(100),
    numberofRows varchar(100),
    reservedSize varchar(50),
    dataSize varchar(50),
    indexSize varchar(50),
    unusedSize varchar(50)
)

--Open the cursor
OPEN tableCursor

--Get the first table name from the cursor
FETCH NEXT FROM tableCursor INTO @TableName

--Loop until the cursor was not able to fetch
WHILE (@@Fetch_Status >= 0)
BEGIN
    --Dump the results of the sp_spaceused query to the temp table
    INSERT  #TempTable
        EXEC sp_spaceused @TableName

    --Get the next table name
    FETCH NEXT FROM tableCursor INTO @TableName
END

--Get rid of the cursor
CLOSE tableCursor
DEALLOCATE tableCursor

--Select all records so we can use the reults
SELECT * 
FROM #TempTable order BY tablename

--Final cleanup!
DROP TABLE #TempTable

对此帖子的格式化抱歉。 StackO肯定是错误的 - 今天没有格式化工具栏。

2 个答案:

答案 0 :(得分:1)

您的代码提供了所使用空间的逐表视图。您也可以在没有参数的情况下运行sp_spaceused以获得整个数据库大小的概述。是什么原因让你怀疑结果?

答案 1 :(得分:1)

您可以考虑使用其中一个system's dynamic views / functions

例如,考虑使用sys.dm_db_index_physical_stats这个简单的查询来返回有关用于堆集群和非集群索引的页面的更详细信息:

select * from sys.dm_db_index_physical_stats ( 
    DEFAULT 
  , DEFAULT 
  , DEFAULT 
  , DEFAULT 
  , 'DETAILED'
)