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

时间:2017-11-29 06:15:58

标签: c# mysql

我谷歌但我无法找到我需要的东西。

我应该使用PREPARE中的EXECUTEMySQL在单个语句中执行多个更新查询。

示例查询:

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语法出错;

我正在努力克服这个错误。

请让我知道完成我需要的方法。提前谢谢。

3 个答案:

答案 0 :(得分:1)

这是不可能的,因为PREPARE / EXECUTE stmt一次只能处理一个语句。参考以下参考MySQL问题:

Execute multiple semi-colon separated query using 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);

答案 1 :(得分:0)

执行以下示例。希望它有所帮助

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 ;

答案 2 :(得分:0)

试试这个。你必须将你必须更新的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 ;