mysql数据库:
比如有个table:sr_problem_process,
这个表中有两百个字段,
有些字段没有用到(即这个字段的所有值都是null),
查询出所有这样的字段,
用sql或存储过程实现,
求大神帮写下,跪谢

解决方案 »

  1.   

    去information_schema.COLUMNS表 用concat拼接一串sql语句来执行
      

  2.   


    DROP PROCEDURE
    IF EXISTS find_null_col;CREATE PROCEDURE find_null_col (
    IN tableName VARCHAR (20),
    IN dbName VARCHAR (20),
    OUT result VARCHAR (200)
    ) -- 创建存储过程 命名为tests
    BEGINDECLARE col_name VARCHAR (50);
    DECLARE no_more_record TINYINT DEFAULT 0;
    DECLARE rs_cursor CURSOR FOR SELECT
    COLUMN_NAME
    FROM
    INFORMATION_SCHEMA. COLUMNS
    WHERE
    table_name =@tableName
    AND table_schema =@dbName;
    DECLARE CONTINUE HANDLER FOR NOT FOUND
    SET no_more_record = 1;OPEN rs_cursor;
    SET @tableName = CONCAT(tableName);
    SET @dbName = CONCAT(dbName);
    REPEAT
    FETCH rs_cursor INTO col_name;
    IF NOT no_more_record THENSET @sqlStr = CONCAT(
    'select 1 from ',
    @tableName,
    ' where ',
    col_name,
    ' is not null limit 1'
    );PREPARE stmt
    FROM
    @sqlStr;-- 预定义一个语句,并将它赋给 stmt
    EXECUTE stmt;
    IF FOUND_ROWS() = 0 THEN
    SELECT
    CONCAT_WS(',', result, col_name) INTO result;
    END
    IF;-- 执行语句
    DEALLOCATE PREPARE stmt;-- 要释放一个预定义语句的资源
    END
    IF;UNTIL no_more_record
    END
    REPEAT
    ;CLOSE rs_cursor;
    END;CALL find_null_col('sr_problem_process', 'db_problem', @test);
    SELECT @test;
      

  3.   

    报啥错?'db_problem'换成你实际的数据库名   OUT result VARCHAR (200)根据实际情况增加varchar的长度,例如OUT result VARCHAR (2000)