[英]Multiple update query in single prepare execute statement mysql
我用谷歌搜索,但是我找不到我真正需要的东西。
我应该使用MySQL
PREPARE
, EXECUTE
在单个语句中执行多个更新查询。
查询样例:
update tableName set column2='a', column3='b' where column1=1;
update tableName set column2='c', column3='d' where column1=2;
update tableName set column2='f', column3='g' where column1=3;
SET @Query=myUpdateQuery;
PREPARE stmt FROM @Query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
我尝试使用上述查询,但遇到错误
错误代码:1064您的SQL语法错误;
我正在努力克服这个错误。
请让我知道满足我需要的方式。 提前致谢。
这是不可能的,因为PREPARE / EXECUTE stmt
一次只能处理一个语句。 授予以下参考MySQL问题:
使用mysql Prepared Statement执行多个用分号分隔的查询
但是,您可以将更新查询改写为单个语句:
UPDATE tableName
SET column2 = CASE WHEN column1 = 1 THEN 'a'
WHEN column1 = 2 THEN 'c'
WHEN column1 = 3 THEN 'f' END,
column3 = CASE WHEN column1 = 1 THEN 'b'
WHEN column1 = 2 THEN 'd'
WHEN column1 = 3 THEN 'g' END
WHERE column1 IN (1, 2, 3);
执行以下示例。 希望能帮助到你
DELIMITER $$
CREATE PROCEDURE proc_name()
BEGIN
update tableName set column2='a', column3='b' where column1=1;
update tableName set column2='c', column3='d' where column1=2;
update tableName set column2='f', column3='g' where column1=3;
END$$
DELIMITER ;
尝试这个。 您必须将以逗号分隔的ID列表作为过程的第一个参数传递给您。 希望这可以帮助。
DELIMITER $$
CREATE PROCEDURE proc_name(IN strIDs VARCHAR(255))
BEGIN
DECLARE strLen INT DEFAULT 0;
DECLARE SubStrLen INT DEFAULT 0;
IF strIDs IS NULL THEN
SET strIDs = '';
END IF;
do_this:
LOOP
SET strLen = LENGTH(strIDs);
update tableName
set column2 = 'a', column3 = 'b'
where column1 = SUBSTRING_INDEX(strIDs, ',', 1);
SET SubStrLen = LENGTH(SUBSTRING_INDEX(strIDs, ',', 1));
SET strIDs = MID(strIDs, SubStrLen, strLen);
IF strIDs = NULL THEN
LEAVE do_this;
END IF;
END LOOP do_this;
END
$$
DELIMITER ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.