如何在MySQL过程的CONCAT()中使用更新
我尝试通过过程更新exist表。但是我得到了一个错误:MySQL:#1064-您的SQL语法有一个错误;请查看与MySQL服务器版本对应的手册,以了解第1行的“=iOS,如何在MySQL过程的CONCAT()中使用更新,mysql,stored-procedures,Mysql,Stored Procedures,我尝试通过过程更新exist表。但是我得到了一个错误:MySQL:#1064-您的SQL语法有一个错误;请查看与MySQL服务器版本对应的手册,以了解第1行的“=iOS,phone\u manufacture=Apple,phone\u model=iPhone,os\u vers=iOS X.X”附近使用的正确语法 我的程序: BEGIN DECLARE a, b INT; DECLARE a1, a2, a3, a4 TEXT; DECLARE cur1 CURSOR FOR SELECT
phone\u manufacture
=Apple,phone\u model
=iPhone,os\u vers
=iOS X.X”附近使用的正确语法
我的程序:
BEGIN
DECLARE a, b INT;
DECLARE a1, a2, a3, a4 TEXT;
DECLARE cur1 CURSOR FOR SELECT id FROM z7_group;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1;
OPEN cur1;
SET b = 0;
SET a1 = "iOS";
SET a2 = "Apple";
SET a3 = "iPhone";
SET a4 = "iOS X.X";
WHILE b = 0 DO
FETCH cur1 INTO a;
IF b = 0 THEN
SET @data_ all_group = (SELECT `myTables` FROM `all_group` WHERE id= a);
SET @s = CONCAT('UPDATE ', @data_ all_group, 'SET `os` = ',a1,', `phone_manufacture` = ',a2,', `phone_model` = ',a3', `os_vers` = ',a4,');
PREPARE stmt3 FROM @s;
EXECUTE stmt3;
END IF;
END WHILE;
CLOSE cur1;
END;
您有两个选择:
(还有更多,但我认为这是你想要的)
SET a1 = "'iOS'";
SET a2 = "'Apple'";
SET a3 = "'iPhone'";
SET a4 = "'iOS X.X'";
并修改句子:
CONCAT('UPDATE ', @data_all_group, ' SET `os` = ',a1,', `phone_manufacture` = ',a2,', `phone_model` = ',a3,', `os_vers` = ',a4)
结果将是:
UPDATE your_table SET `os` = 'iOS', `phone_manufacture` = 'Apple', `phone_model` = 'iPhone', `os_vers` = 'iOS X.X'
SET @s = CONCAT('UPDATE ', @data_all_group
, "SET `os` = '" , a1 ,"',"
, "`phone_manufacture` = '",a2,"',"
, "`phone_model` = '",a3,"',"
, "`os_vers` = '",a4,"'");
通常您不能使用
作为分隔符(如果在存储过程中使用)。我很惊讶它被解析的如此之远。另一件需要注意的事情是,你只是在干扰任意数据,而没有逃逸到那里。那是行不通的。使用:SET os=?,phone\u manufacture=?,…
然后执行。。。使用绑定变量CONCAT
在这里是完全不必要的。@tadman但如果我使用ALTER TABLE来更新所有内容,那么使用占位符值并查看是否有帮助。您的表名是动态的是一个复杂的问题,但我相信您可以解决这个问题。