Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用系统表计算各种表中空行的百分比_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql 使用系统表计算各种表中空行的百分比

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

我试图确定表中所有字段的空项百分比。我必须在几个有大量字段的表上运行它,我正在寻找一种自动化的方法

我知道我可以查询“information\u schema.columns”并获得一个清晰的字段名列表:

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)