2009-05-13 11 views
0

Ich habe eine SQL Server 2000-Datenbank und möchte Zusammenfassungsinformationen für alle numerischen Felder abrufen, die in den Benutzertabellen der Datenbank enthalten sind.T-SQL-Abfrage zum Zusammenfassen numerischer Felder in einer SQL Server 2000-Datenbank

Ich kann die Namen, Datentypen und Größen mit der folgenden Abfrage abrufen:

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 

Wie kann ich einen Schritt weiter gehen und auch den Durchschnittswert in jedem Feld enthaltenen Liste?

Kann dies mit einer Unterabfrage erfolgen, oder muss ich das Ergebnis dieser Abfrage in einen Cursor einfügen und eine zweite Auswahlabfrage für jede Spalte durchlaufen?

Antwort

1

Meine beste und schnelle Vermutung ist, durch einen Cursor zu verwenden:

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 

Eine temporäre Tabelle auch gut funktionieren soll. Sie können auch die Min() und Max() Werte hinzufügen. Hoffe es hilft

+0

Danke - Ich erkannte, dass es würde nicht Das ist nicht möglich in einer einzigen Abfrage, da Sie keine Auswahl aus Variablen erstellen können - aber ich habe nicht daran gedacht, dies mit exec() zu lösen. Perfekt, danke! – meepmeep

0

Es scheint mir, dass Sie ein Profilierungswerkzeug benötigen. Sie können Visual Studio 2008 Database Edition oder eine Open Source-Alternative wie DataCleaner verwenden.

+0

Einverstanden, DataCleaner ist eine gute Wahl. Damit finden Sie viel interessanteres Zeug als jeder eingebaute Daten-Profiler. Die neueste Version hat eine etwas bessere Dokumentation über die Verbindung zu MS SQL Server, so sollte es jetzt einfacher sein: http://datacleaner.eobjects.org/resources/docs/2.4/html/ch10s03.html –

Verwandte Themen