add remove split language show hidden hide
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
4 rows affected
2 rows affected
ORDINAL_POSITION COLUMN_NAME NonBlankCount
1 col1 3
2 col2 1

        INSERT INTO #ColumnValueCounts 
            (TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME,
             COLUMN_NAME, ORDINAL_POSITION, DATA_TYPE,
             NON_BLANK_COUNT)
        SELECT
            C.TABLE_CATALOG, C.TABLE_SCHEMA, C.TABLE_NAME,
            C.COLUMN_NAME, C.ORDINAL_POSITION, DATA_TYPE,
            ISNULL(NBC.NonBlankCount, 0)
        FROM INFORMATION_SCHEMA.COLUMNS C
        LEFT JOIN (
            SELECT NB.ORDINAL_POSITION, COUNT(*) AS NonBlankCount
            FROM [dbo].[Table1] T
            CROSS APPLY (
                SELECT 0 AS ORDINAL_POSITION WHERE 1 = 0 -- Empty result to seed the union
                UNION ALL SELECT 1 WHERE 1 = 1 AND DATALENGTH(T.[col1]) > 0 -- [col1] [varchar] NOT NULL
                UNION ALL SELECT 2 WHERE 1 = 1 AND T.[col2] IS NOT NULL AND DATALENGTH(T.[col2]) > 0 -- [col2] [varchar]
            ) NB
            GROUP BY NB.ORDINAL_POSITION
        ) NBC
            ON NBC.ORDINAL_POSITION = C.ORDINAL_POSITION
        WHERE C.TABLE_SCHEMA = N'dbo'
        AND C.TABLE_NAME = N'Table1'
        ORDER BY C.ORDINAL_POSITION;
    

        INSERT INTO #ColumnValueCounts 
            (TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME,
             COLUMN_NAME, ORDINAL_POSITION, DATA_TYPE,
             NON_BLANK_COUNT)
        SELECT
            C.TABLE_CATALOG, C.TABLE_SCHEMA, C.TABLE_NAME,
            C.COLUMN_NAME, C.ORDINAL_POSITION, DATA_TYPE,
            ISNULL(NBC.NonBlankCount, 0)
        FROM INFORMATION_SCHEMA.COLUMNS C
        LEFT JOIN (
            SELECT NB.ORDINAL_POSITION, COUNT(*) AS NonBlankCount
            FROM [Some Schema].[Table Ω] T
            CROSS APPLY (
                SELECT 0 AS ORDINAL_POSITION WHERE 1 = 0 -- Empty result to seed the union
                UNION ALL SELECT 1 WHERE 1 = 1 AND T.[col α] <> '1900-01-01' -- [col α] [datetime] NOT NULL
                UNION ALL SELECT 2 WHERE 1 = 1 AND T.[col β] IS NOT NULL -- [col β] [int]
                UNION ALL SELECT 3 WHERE 1 = 1 -- [col γ] [int] NOT NULL
            ) NB
            GROUP BY NB.ORDINAL_POSITION
        ) NBC
            ON NBC.ORDINAL_POSITION = C.ORDINAL_POSITION
        WHERE C.TABLE_SCHEMA = N'Some Schema'
        AND C.TABLE_NAME = N'Table Ω'
        ORDER BY C.ORDINAL_POSITION;
    
5 rows affected
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION DATA_TYPE NON_BLANK_COUNT
fiddle_21e8acb661e84a12a789ecc7a71e8259 dbo Table1 col1 1 varchar 3
fiddle_21e8acb661e84a12a789ecc7a71e8259 dbo Table1 col2 2 varchar 2
fiddle_21e8acb661e84a12a789ecc7a71e8259 Some Schema Table Ω col α 1 datetime 1
fiddle_21e8acb661e84a12a789ecc7a71e8259 Some Schema Table Ω col β 2 int 1
fiddle_21e8acb661e84a12a789ecc7a71e8259 Some Schema Table Ω col γ 3 int 2