2009-04-09 5 views
1

Ich versuche, den Prozentsatz von Nullelementen für alle Felder einer Tabelle zu bestimmen. Ich muss das auf mehreren Tischen mit einer Menge Felder ausführen, und ich suchte nach einem automatisierten Weg, dies zu tun.Verwenden von Systemtabellen zum Zählen des Prozentsatzes von Zeilen Null in verschiedenen Tabellen

Ich weiß, ich kann „information_schema.columns“ abfragen und eine schöne saubere Liste von Feldnamen erhalten ala:

select Column_name 
from information_schema.columns 
where table_name='TableName' 

Aber ich kann nicht mit etwas schnell und schmutzig zu kommen scheinen, um den Prozentsatz zu tun Zähle für jedes Feld, ich vermute, dass ich ein dynamisches sql irgendeiner Art brauche? Hat jemand einen Vorschlag, wie man das angehen könnte?

Antwort

0

AFAIK der einzige Weg, es zu tun ist, dynamische sql (z. B. sp_executesql) zu verwenden. Es gibt Indexstatistiken aber NULL-Werte sind nicht in Indizes gespeichert ...

2

Vielleicht zu einfach, aber die Grundidee kann auf verschiedene Weise erweitert werden (ich normalerweise Variablen für @CRLF und @TAB für die Codegenerierung):

DECLARE @sql AS varchar(MAX) 

SELECT @sql = COALESCE(@sql + CHAR(13) + CHAR(10) + 'UNION' + CHAR(13) + CHAR(10), '') 
    + 'SELECT ''' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) + '.' + QUOTENAME(COLUMN_NAME) + ''' AS COLUMN_NAME' + CHAR(13) + CHAR(10) 
     + CHAR(9) + ',COUNT(*) AS TotalRows' + CHAR(13) + CHAR(10) 
     + CHAR(9) + ',COUNT(' + COLUMN_NAME + ') AS NonNullCount' + CHAR(13) + CHAR(10) 
    + 'FROM ' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) 
FROM INFORMATION_SCHEMA.COLUMNS WHERE IS_NULLABLE = 'YES' 

PRINT @sql 
EXEC (@sql) 

Soweit Ihre Prozentsätze, war ich nicht sicher, ob das über die gesamte Tabelle oder eine bestimmte Spalte war, so überlasse ich es als eine Übung für den Leser.

Verwandte Themen