SQL Server 2000 Enterprise Manager でテーブルの行数を調べる
SQL Server 2000 でテーブルの行数を調べる手軽な方法は、Enterprise Manager で任意のテーブルのプロパティを表示し、[行:]項目を確認することです。
SQL Server プロファイラ を使用して Enterprise Manager が [行:]項目 を表示するまでの動作を追ってみると、sp_MStablespace というストアドプロシージャを利用していることに気づきます。
sp_MStablespace ストアドプロシージャは、そのロジックの中で
SELECT @rows = convert(int, rowcnt)
FROM dbo.sysindexes
WHERE indid < 2 and id = @id
というクエリを実行しています。
確かに dbo.sysindexes テーブルの rows 列を取得することでテーブルの行数を高速に取得することが出来るのですが、この方法では正しい行数が取得できないときがあります。
dbo.sysindexes テーブルに各テーブルに於けるインデックスの状態が正しく記録されていない場合です。
こういった場合は dbo.sysindexes テーブルを正常な状態に回復する作業が必要です。
DBCC UPDATEUSAGE ステートメントを利用して rows 列を訂正するのが常道ですが、テーブルのインデックスを一度削除して張り直すことでも回復するようです。