2012-05-10 12 views
3

この手順では、データベースで使用される領域が正確に表示されますか?私は結果を疑っている。テーブルで使用される領域

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がテーブル名をparamとして受け入れることに感謝します。 procの出力は上の出力と一致します。使用した表スペースの合計がKBをMBに変換した後のdbサイズを超えたため、私はそれを疑った。 – ChadD

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' 
) 
関連する問題