SQL count all nulls in every columns in all tables in a sys tables

后端 未结 1 1237
旧时难觅i
旧时难觅i 2021-01-26 19:39

I have the following SQL:

    SET NOCOUNT ON
DECLARE @Schema NVARCHAR(100) = \'dbo\'
DECLARE @Table NVARCHAR(100) = NULL
DECLARE @sql NVARCHAR(MAX) =\'\'
IF OBJE         


        
相关标签:
1条回答
  • 2021-01-26 20:02

    No need for a cursor. Just set your @Table to NULL

    DECLARE @Table NVARCHAR(100) = NULL

    Then change your WHERE clause from this

    WHERE TABLE_SCHEMA = @Schema AND TABLE_NAME = @Table

    to WHERE TABLE_SCHEMA = @Schema AND (@Table IS NULL OR TABLE_NAME = @Table)

    So the entire code...

    SET NOCOUNT ON
    DECLARE @Schema NVARCHAR(100) = 'dbo'
    DECLARE @Table NVARCHAR(100) = NULL
    DECLARE @sql NVARCHAR(MAX) =''
    IF OBJECT_ID ('tempdb..#Nulls') IS NOT NULL DROP TABLE #Nulls
    
    CREATE TABLE #Nulls (TableName sysname, ColumnName sysname, ColumnPosition int 
    , NullCount int , NonNullCount int)
    
    SELECT @sql += 'SELECT  '''+TABLE_NAME+''' AS TableName ,      
    
    '''+COLUMN_NAME+''' AS ColumnName,  '''+CONVERT(VARCHAR(5),ORDINAL_POSITION)+'''AS ColumnPosition,     
    SUM(CASE WHEN '+COLUMN_NAME+' IS NULL THEN 1 ELSE 0 END) CountNulls ,   
    COUNT(' +COLUMN_NAME+') CountnonNulls FROM   
    '+QUOTENAME(TABLE_SCHEMA)+'.'+QUOTENAME(TABLE_NAME)+';'+ CHAR(10)
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = @Schema AND (@Table IS NULL OR TABLE_NAME = @Table)
    
    INSERT INTO #Nulls 
    EXEC sp_executesql @sql
    
    SELECT * 
    FROM #Nulls
    
    0 讨论(0)
提交回复
热议问题