mysql - 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
将使用。有没有办法将所有新值存储到一个变量中,也许是一个字符串,并让我的程序从中选择值?或者我有什么选择?
解决方案
推荐阅读
- javascript - 如何处理反应导航中的身份验证流程?
- javascript - 如何识别回调函数的行为?
- angular - 运行 Angular 应用程序只显示 Angular 默认主页
- wpf - 在 WPF 中模糊流文档
- python - 是否可以在一次迭代中找到字符串中的指定子字符串,或者比 O(n*m) 更快?
- amazon-web-services - 是否可以在使用 Ansible Playbook 影响其他实例的 EC2 实例上使用 IAM 角色?
- angular - Angular MSAL库acquireTokenRedirect与acquireTokenPopup错误
- javascript - 每次更新 flatlist 中的数据时,我是否应该使用 useEffect 重新加载 flatlist?
- java - 按钮单击后返回文本字段
- vue.js - 在 Laravel 中的 2 个 VueJS 组件之间传递变量不起作用