我有一个名为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脚本来获取所需的输出:
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
您将得到如下输出: