首页 > 解决方案 > MYSQL 准备语句过程,它更新表的可变数量的列

问题描述

我需要创建一个使用准备好的语句的存储过程,其目的是更新表。问题是我事先不知道表格的哪些列将被更新。它可以是一列、几列或全部。我创建了以下过程,但遇到了一个我无法弄清楚的问题:

CREATE DEFINER=`root`@`localhost` 
PROCEDURE `updateEntries`(  IN setcols varchar(200), 
                            IN column varchar(20), 
                            IN relation varchar(10), 
                            IN value varchar(15), 
                            IN setvalue varchar(100)
                         )
BEGIN
SET @sql = CONCAT('UPDATE table SET ',setcols,' WHERE ', column,' ', relation,' ?');
SET @setvalue = setvalue;
SET @value = value;
PREPARE stmt FROM @sql;
EXECUTE stmt USING @setvalue, @value;
DEALLOCATE PREPARE stmt;
END

当我必须只更新一列时,我可以轻松调用该过程,如下所示: call updateEntries('column = ?','id', '>', 2, 'new_value') 因为我@sql将是:UPDATE table SET column = ? WHERE id > ?; new_value将被分配给@setvalue并且2将被分配给value然后执行的所有操作。

但是,我不知道当有多个列要更新时我应该做什么,因为我需要将每列的所有这些新值存储到变量中,这EXECUTE将使用。有没有办法将所有新值存储到一个变量中,也许是一个字符串,并让我的程序从中选择值?或者我有什么选择?

标签: mysqlstored-proceduresprepared-statement

解决方案


推荐阅读