Mysql存储过程动态拼接sql语句

刚接触存储过程,现在的需求是这样的:有一个表需要我更新其中的某些字段,但是表里面的字段太多了,而且下次再更新也不确定是哪些字段要批量更新,所以就需要动态创建一个update语句来完成这个工作。

存储过程无疑是个好的选择,在mysql数据库中,所有表的字段保存在了information_schema.COLUMNS中,所以写如下存储过程解决该问题。

DROP PROCEDURE IF EXISTS test.`wk`;
DELIMITER $$

CREATE
    
    PROCEDURE `test`.`wk`()
   
    BEGIN
	DECLARE i INT DEFAULT 0;
	DECLARE c_name VARCHAR(50);
	DECLARE done INT DEFAULT 0;
	DECLARE update_sql VARCHAR(100) DEFAULT 'update test.tb_student set ';
	DECLARE cur CURSOR FOR SELECT ifsc.COLUMN_NAME FROM information_schema.`COLUMNS` ifsc WHERE ifsc.TABLE_NAME = 'tb_student' AND ifsc.COLUMN_NAME NOT IN('id');
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
	OPEN cur;
	my_loop:LOOP
		FETCH cur INTO c_name;
		IF done=1 THEN
			LEAVE my_loop;
		END IF;
		SET @keyvalue=CONCAT(c_name,'=NULL');
		IF i <> 0 THEN
		SET @keyvalue=CONCAT(',',@keyvalue);
		END IF;
		SET update_sql=CONCAT(update_sql,@keyvalue);
		SET i=i+1;
	END LOOP my_loop;
	CLOSE cur;
	SELECT update_sql;
    END$$

DELIMITER ;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章