SQL Server中の「全DB名」「DB毎のテーブル名」「テーブル毎のレコード件数」を取得するスクリプト

このエントリーをはてなブックマークに追加

久しぶりに、SQL ServerでSQLスクリプトを作成しましたので参考掲載をさせていただきます。

以下のスクリプトを実行することにより、次のような情報を取得します。

<取得できる情報>

・SQL Server中に存在するDB名の一覧

・SQL Server中に存在するDB毎の格納テーブル名の一覧

・SQL Server中に存在するDB毎かつテーブル毎の格納レコード件数の一覧

 

 <参考SQLスクリプト>

※SQLスクリプトのダウンロードはこちらからどうぞ (^_^)

use master
go

/*——————————–*/
/* 調査対象DB名を控える変数     */
/*——————————–*/
DECLARE  @dbname varchar(80);

/*————————————*/
/* 調査対象DB一覧を取得するカーソル */
/*————————————*/
DECLARE DbNameList CURSOR FOR
select name from sysdatabases

/*——————*/
/* DB調査を開始   */
/*——————*/
OPEN DbNameList;

/*——————————*/
/* 調査対象となるDB名を取得   */
/*——————————*/
FETCH NEXT FROM DbNameList INTO @dbname;

WHILE @@FETCH_STATUS = 0
BEGIN

/*——————————*/
/* 調査対象DBの調査結果を出力 */
/*——————————*/
print '→調査対象DB:' + @dbname;

EXEC ('USE ' + @dbname + ';' +
'select sysobjects.name As "テーブル名",
sysindexes.rows As "データ件数",
sysindexes.indid As "INDEXタイプ(クラスタ化/非クラスタ化)",
sysobjects.type As  "TBL定義タイプ"
from sysobjects ,sysindexes
where ( sysobjects.id        =  sysindexes.id       ) and
( sysobjects.type      = ''U''               ) and
( sysindexes.indid     in (0,1)               )
order by sysobjects.name , sysindexes.name;' );

/*——————————–*/
/* 次の調査対象となるDB名を取得 */
/*——————————–*/
FETCH NEXT FROM DbNameList INTO @dbname;

END;
CLOSE DbNameList;

DEALLOCATE DbNameList;

GO

 

2014年2月7日 | カテゴリー : SQL Server | 投稿者 : sanobo