繁体   English   中英

单个准备执行语句mysql中的多个更新查询

[英]Multiple update query in single prepare execute statement mysql

我用谷歌搜索,但是我找不到我真正需要的东西。

我应该使用MySQL PREPAREEXECUTE在单个语句中执行多个更新查询。

查询样例:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM