通过 information_schema.columns 查找 Azure Synapse 外部 SQL 表的所有列的总空值

问题描述 投票:0回答:1

我有一个名为employee 的Azure 外部表

name   acc_no   address    contact        zipcode    salary
amit   123                                12345      25000
sumit                                     12345      35000
neha   234     n block                    12206      

我想要一个 sql 脚本,我不必提及列名称并从 information_schema.columns 获取它们,并获取每列中的空值计数作为下面的输出

column_name     total_empty_values
 name             0
acc_no            1
address           2
contact           3
zipcode           0
salary            1

我想要一个通用代码,因为我有 20 个外部表,每个表中至少有 15 列。所以我想要一个脚本,我只需更改 table_name='employee'。请为我提供解决方案。我正在处理 Azure Synapse 外部表 SQL 脚本。模式名称是 db1。

sql azure-synapse information-schema external-tables
1个回答
0
投票

您可以使用下面的sql脚本来获取所需的输出:

   DECLARE @TableName NVARCHAR(MAX) = '<tableName>';
DECLARE @sql NVARCHAR(MAX) = '';

IF EXISTS (
    SELECT 1
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME = @TableName
)
BEGIN
    SELECT @sql = @sql +
        'SELECT ''' + COLUMN_NAME + ''' AS column_name, ' +
        'COUNT(CASE WHEN ' + COLUMN_NAME + ' = '''' OR ' + COLUMN_NAME + ' IS NULL THEN 1 ELSE NULL END) AS total_empty_values ' +
        'FROM ' + @TableName + ' UNION ALL '
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = @TableName;

    -- Remove the last 'UNION ALL' from the generated SQL
    SET @sql = LEFT(@sql, LEN(@sql) - LEN('UNION ALL '));

    -- Execute the dynamic SQL
    EXEC sp_executesql @sql;
END
ELSE
BEGIN
    PRINT 'Table ' + @TableName + ' does not exist.';
END

您将得到如下输出:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.