2009-05-13 7 views
0

私はSQL Server 2000 dbを持っています。データベースのユーザーテーブルに含まれるすべての数値フィールドの要約情報を取得したいと考えています。SQL Server 2000データベースの数値フィールドを要約するT-SQLクエリ

私は次のクエリでの名前、データ型とサイズを取得することができます。

SELECT t.name AS [TABLE Name], 
c.name AS [COLUMN Name], 
p.name AS [DATA Type], 
p.length AS [SIZE] 
FROM dbo.sysobjects AS t 
JOIN dbo.syscolumns AS c 
ON t.id=c.id 
JOIN dbo.systypes AS p 
ON c.xtype=p.xtype 
WHERE t.xtype='U' 
and p.prec is not null 

は、どのように私はさらに一歩進んで、また各フィールド内に含まれる平均値を一覧表示することができますか?

サブクエリでこれを行うことはできますか、このクエリの結果をカーソルに置き、各列の2番目の選択クエリをループする必要がありますか?

答えて

1

私の最高かつ迅速な推測では、カーソルを使用することです:

DECLARE @Table varchar(80) 
DECLARE @Column varchar(80) 
DECLARE @Sql varchar(300) 

DECLARE fields CURSOR FORWARD_ONLY 
FOR SELECT t.name AS [Table], c.name AS [COLUMN] 
FROM dbo.sysobjects AS t 
JOIN dbo.syscolumns AS c ON t.id=c.id 
JOIN dbo.systypes AS p ON c.xtype=p.xtype 
WHERE t.xtype='U' 
    and p.name = 'int' 
    and p.prec is not null 

OPEN fields 

FETCH NEXT FROM fields 
INTO @Table, @Column 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = 'SELECT ''' + @Table + '.' + @Column + ''', Avg(' + @Column+ ') FROM ' + @Table 
    EXEC(@Sql) 

    FETCH NEXT FROM fields 
    INTO @Table, @Column 

END 
CLOSE fields 
DEALLOCATE fields 

一時テーブルがあまりにも、正常に動作する必要があります。 Min()とMax()値を追加することもできます。 希望します。

+0

ありがとうございます変数からselectを構成することはできませんが、exec()でこれを克服することは考えていませんでした。 完璧、ありがとう! – meepmeep

0

プロファイリングツールが必要です。 Visual Studio 2008 Database Edition、またはDataCleanerなどのオープンソースの代替製品を使用できます。

+0

合意された、DataCleanerは素晴らしい選択です。これにより、組み込みのデータプロファイラよりもはるかに面白いことが分かります。最新のバージョンは、MS SQLサーバーへの接続に関するより良い文書を持っていますので、今はもっと簡単になります:http://datacleaner.eobjects.org/resources/docs/2.4/html/ch10s03.html –

関連する問題