2010-11-23 8 views
1

は、多くのテーブルを持つデータベース(Sybaseの)を与える、私は、各テーブルのために、行数と列数を計算しますSQLクエリを記述したいと思います。データベースメトリクスを生成するための簡単なクエリ?

残念ながら、私のSQLは少し錆びです。私は、テーブル名を生成することができます。

select name from sysobjects where type = 'U' 

が、どのようにデータベースをバインドするには、中にTに戻っ:

select count(*) from T 

私を超えています。このようなことをすることさえ可能ですか?

答えて

3

私はSybaseを使用していませんが、オンラインドキュメントには、行数がsystabstatsであり、列がsyscolumnsにあることが示されています。

SELECT sysobjects.name, 
     (SELECT COUNT(*) FROM syscolumns WHERE syscolumns.id = sysobjects.id) AS cols, 
     systabstats.rowcnt 
    FROM sysobjects 
    JOIN systabstats 
    ON (sysobjects.id = systabstats.id AND sysobjects.type = 'U' AND systabstats.indid = 0) 
+0

は、SQL ServerおよびSybaseは、同様の血を持っていることを考えると、これはうまく動作するはずです。 –

+0

これはASEで動作します – AdamH

2

fredtが答えを与えたので、私はちょっと追加情報を提供します。

「テーブル名」は、それが使っているどのくらいのストレージスペースの詳細とともに、選択されたテーブルのためにあなたの行数を与えるsp_spaceusedを手順に建てられました。このパラメータを指定せずに使用すると、現在のデータベース全体のストレージ使用量を提供します。

あなたは、彼らが自分から情報を取得する場所を確認するために、様々なシステムストアドプロシージャ内のSQLを見ることができます。 sp_spaceusedとsp_helpは両方ともあなたの役に立つでしょう。 sybsystemprocsデータベースに存在します。これらの手順を変更しないように注意してください。

sp_rowcountという名前のストアドプロシージャのさまざまなバージョンがインターネット上に浮かんでいます。これはあなたが求めているもの(とにかくrowcount)を提供しますが、その中にはfredtのselect文と同じものがあります。私が使用するものは、インデックスカウントとテーブルロックスキームを提供します。私は自分がどこにいるのか正確には思い出さないので、誰かの著作権を怒らせた場合に備えて配布したくない。

+0

私はsp_spaceusedなどのようなシステムprocsの邪魔になるかどうかわかりませんでした。先端に感謝します。 – CBFraser

関連する問題