2016-06-02 3 views
1

私は、データベースのテーブルに関するレポートを取得するスクリプトを用意しています。SQL Server 2012 - 列の最適化に関するレポートを取得する

私の質問は、最適化されていない列に関するデータも取得する方法です。

例: カラム名、reserveddata、useddata、unoptimised/unusedspace。

コード:

use tempdatabase 

create table #getdatav1 (
    [table] varchar(255), 
    [rows] int, 
    reserved varchar(255), 
    data varchar(255), 
    index_size varchar(255), 
    unused varchar(255)) 
create table #getdatav2 (
    [servername] varchar(50), 
    [basename] varchar(50), 
    [table] varchar(255), 
    [rows] int, 
    reservedKb int, 
    dataKb int, 
    reservedIndexSize int, 
    reservedUnused int) 

EXEC sp_MSforeachtable @command1="insert into #getdatav1 
EXEC sp_spaceused '?'" 
insert into #getdatav2 ([servername], [basename], [table], [rows], reservedKb, dataKb, reservedIndexSize, reservedUnused) 
select @@SERVERNAME, DB_NAME(), [table], [rows], 
SUBSTRING(reserved, 0, LEN(reserved)-2), 
SUBSTRING(data, 0, LEN(data)-2), 
SUBSTRING(index_size, 0, LEN(index_size)-2), 
SUBSTRING(unused, 0, LEN(unused)-2) 
from #getdatav1 

select * from #getdatav2 
order by reservedKb desc 

答えて

0

sp_spaceusedのみテーブルのコンテキストで動作し、それはあなたが探しているものであれば、個々の列に対して実行することはできません。

検査したいテーブルの各列にカーソルを合わせ、各列を個別にテンポラリテーブルにコピーします。このテンポラリテーブルにはその列のみが含まれます。sp_spaceusedを実行すると、列単位で。

個々の列を別の表にコピーしてからsp_spaceusedを実行するという概念を示すストアドプロシージャの例は、hereを参照してください。これを出発点とし、カーソルを作成して、解析する各テーブルとフィールドをステップ実行して、sp_spaceused2ストアドプロシージャを呼び出すことができます(これについては、わかりやすく説明的な名前を選択することをおすすめします)。それぞれの結果を最終的な表示のためにテーブルに戻します。

関連する問題