Sql 使用系统表计算各种表中空行的百分比
我试图确定表中所有字段的空项百分比。我必须在几个有大量字段的表上运行它,我正在寻找一种自动化的方法 我知道我可以查询“information\u schema.columns”并获得一个清晰的字段名列表:Sql 使用系统表计算各种表中空行的百分比,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我试图确定表中所有字段的空项百分比。我必须在几个有大量字段的表上运行它,我正在寻找一种自动化的方法 我知道我可以查询“information\u schema.columns”并获得一个清晰的字段名列表: select Column_name from information_schema.columns where table_name='TableName' 但是我似乎不能想出一些快速而肮脏的方法来计算每个字段的百分比,我猜我需要一些某种类型的动态sql?有没有人对此有什么好的建议?A
select Column_name
from information_schema.columns
where table_name='TableName'
但是我似乎不能想出一些快速而肮脏的方法来计算每个字段的百分比,我猜我需要一些某种类型的动态sql?有没有人对此有什么好的建议?AFAIK唯一的方法就是使用动态sql(例如sp_executesql)。有索引统计信息,但空值不存储在索引中…可能太简单了,但基本思想可以以不同的方式扩展(我通常有用于
@CRLF
的变量和用于代码生成的@TAB
):
至于你的百分比,我不确定这是在整个表中还是只在某一列中,所以我将把它留给读者作为练习
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)