2012-05-10 70 views
3

該過程是否準確地顯示了在db中使用的空間?我懷疑結果。表空間使用的空間

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確實是越野車 - 今天沒有格式化工具欄。

回答

1

您的代碼提供了所用空間的逐個表格視圖。您也可以運行不帶參數的sp_spaceused以獲得整個數據庫大小的概述。是什麼讓你懷疑結果?

+0

感謝提示,存儲過程接受表名作爲參數。 proc的輸出與上面的輸出相匹配。我懷疑它是因爲在將KB轉換爲MB之後,所用表空間的總和超過了數據庫大小。 – ChadD