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 ;



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