mysql資料庫:
比如有個table:sr_problem_process,
這個表中有兩百個欄位,
有些欄位沒有用到(即這個欄位的所有值都是null),
查詢出所有這樣的欄位,
用sql或存盤程序實作,
求大神幫寫下,跪謝
uj5u.com熱心網友回復:
去information_schema.COLUMNS表 用concat拼接一串sql陳述句來執行uj5u.com熱心網友回復:
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
BEGIN
DECLARE 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 THEN
SET @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;
uj5u.com熱心網友回復:
這個執行有錯誤啊
uj5u.com熱心網友回復:
報啥錯?'db_problem'換成你實際的資料庫名
OUT result VARCHAR (200)根據實際情況增加varchar的長度,例如OUT result VARCHAR (2000)
uj5u.com熱心網友回復:
創建存盤程序的時候,直接報語法錯誤
uj5u.com熱心網友回復:
大神 ,求助啊……
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/113835.html
標籤:MySQL
上一篇:mysql 欄位型別轉換
下一篇:請教mysql怎么優化
