2023年8月3日发(作者:)

Mysql存储过程动态拼接sql语句刚接触存储过程,现在的需求是这样的:有⼀个表需要我更新其中的某些字段,但是表⾥⾯的字段太多了,⽽且下次再更新也不确定是哪些字段要批量更新,所以就需要动态创建⼀个update语句来完成这个⼯作。存储过程⽆疑是个好的选择,在mysql数据库中,所有表的字段保存在了information_S中,所以写如下存储过程解决该问题。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 _student set '; 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 ; DECLARE cur CURSOR FOR SELECT _NAME FROM information_schema.`COLUMNS` ifsc WHERE _NAME = 'tb_student' AND

2023年8月3日发(作者:)

Mysql存储过程动态拼接sql语句刚接触存储过程,现在的需求是这样的:有⼀个表需要我更新其中的某些字段,但是表⾥⾯的字段太多了,⽽且下次再更新也不确定是哪些字段要批量更新,所以就需要动态创建⼀个update语句来完成这个⼯作。存储过程⽆疑是个好的选择,在mysql数据库中,所有表的字段保存在了information_S中,所以写如下存储过程解决该问题。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 _student set '; 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 ; DECLARE cur CURSOR FOR SELECT _NAME FROM information_schema.`COLUMNS` ifsc WHERE _NAME = 'tb_student' AND