SQLServer-全テーブルのデータ件数を取得する

 全てのテーブルのデータ件数を取得するT-SQLスクリプト書いたのでメモ。
 DB移行なんかの時の検証用にでも。
 SQLServer7.0で動きました。
 単にテーブル名取ってきてCountした結果を一時テーブルに突っ込んでるだけです。

--すべてのユーザーテーブルのデータ行数を一覧表示する

--テーブル名(サイズは適当です。必要に応じて増やしてね。)
DECLARE @TABLE_NAME NVARCHAR(100)

--集計用SQL(SQL文字列用です。必要に応じてry)
DECLARE @SQL NVARCHAR(100)

--件数取得用
DECLARE @ROW_COUNT int

--集計結果保存用一時テーブル
CREATE TABLE #T_RESULT(
TABLE_NAME NVARCHAR(100),
ROW_COUNT int
)

--sysobjectsに保存されているユーザーテーブルをすべて取り出すカーソル
DECLARE C_TABLES CURSOR FOR
  SELECT name
  FROM sysobjects
  WHERE (type = 'U')

OPEN C_TABLES

FETCH NEXT FROM C_TABLES INTO @TABLE_NAME

WHILE @@FETCH_STATUS = 0
BEGIN
  --データ件数集計用SQL文字列の生成
  SET @SQL = N'SELECT @ROW_COUNT = COUNT(*) FROM ' + @TABLE_NAME

  --行数をOUTPUTするSQL実行
  EXEC SP_EXECUTESQL @SQL, N'@ROW_COUNT int OUTPUT', @ROW_COUNT OUTPUT

  --結果を一時テーブルにINSERT
  INSERT INTO #T_RESULT VALUES (@TABLE_NAME, @ROW_COUNT)

  FETCH NEXT FROM C_TABLES INTO @TABLE_NAME
END

CLOSE C_TABLES
DEALLOCATE C_TABLES

SELECT * FROM #T_RESULT ORDER BY TABLE_NAME


 ※後日追記
 人力検索にサンプルソースが。

 ※追記
 SQLServer2005以降はこちらにサンプルが!


コメントを残す