如何传递变量来更新mysql查询

如何传递变量来更新mysql查询,mysql,variables,Mysql,Variables,我想用以下命令替换表中的值(1>-1 更新表\u名称 设置column\u name=replace(column\u name,'-1') 然而,我决定学习如何在Mysql中使用存储程序,因为列的数量很大,并且有规则的格式名称n('i01','i02',…)。 以下是我的审判: 分隔符$$ 删除过程(如果存在)示例$$ 创建过程示例() 开始 声明p INT; 声明str VARCHAR(20); 设置p=1; 而p

我想用以下命令替换表中的值(1>-1 更新
表\u名称
设置
column\u name
=replace(column\u name,'-1')

然而,我决定学习如何在Mysql中使用存储程序,因为列的数量很大,并且有规则的格式名称n('i01','i02',…)。 以下是我的审判:


分隔符$$
删除过程(如果存在)示例$$
创建过程示例()
开始
声明p INT;
声明str VARCHAR(20);
设置p=1;
而p<100

如果p是的,那么您在PREPARE方面的做法是正确的。。唯一的问题是,您必须将查询字符串与字符串外部的变量名关联,才能访问其内容

SET @A = (SELECT CONCAT("UPDATE target_table SET `", @str, "` = replace(str, '1', '-1');"));
PREPARE qry FROM @A;
EXECUTE qry;
DEALLOCATE PREPARE qry;
如果您拥有的
replace
与您的变量@str相关(因为您没有@符号,我不确定它是实际列还是变量),那么您需要稍微更改@

SET @A = (SELECT CONCAT("UPDATE target_table SET `", @str, "` = replace(", @str, ", '1', '-1');"));

对于您的声明,这应该是您的最终查询

DELIMITER $$
DROP PROCEDURE IF EXISTS example$$
CREATE PROCEDURE example()
BEGIN
DECLARE p INT;
DECLARE str VARCHAR(20);
DECLARE update_qry VARCHAR(200);
SET p = 1;

    WHILE p < 100 DO
        -- set up column name
        IF p <= 9 
            THEN SET str = CONCAT('i0', p);
            ELSE SET str = CONCAT('i', p);
        END IF;
        -- set up query to execute
        SET update_qry = CONCAT("UPDATE target_table SET `", str, "` = replace(", str, ", '1', '-1');")
        -- prepare execute and deallocate query
        PREPARE qry FROM update_qry;
        EXECUTE qry;
        DEALLOCATE PREPARE qry;
        -- increment counter for next column name
        SET p = p + 1; 
    END WHILE; 
END$$
分隔符$$
删除过程(如果存在)示例$$
创建过程示例()
开始
声明p INT;
声明str VARCHAR(20);
声明update_qry VARCHAR(200);
设置p=1;
而p<100
--设置列名

如果p@YongWookShin肯定会的!很高兴我能帮上忙:)你这么快就接受了答案,我给你打+1分!!thanksI刚刚对SET@update_qry=CONCAT(“update jung_um SET
”,str,“
=replace(“,str,,'2','1');”)进行了一点修改;从@update\u qry准备qry;你为什么有@标志?如果你申报,你就不需要@
DELIMITER $$
DROP PROCEDURE IF EXISTS example$$
CREATE PROCEDURE example()
BEGIN
DECLARE p INT;
DECLARE str VARCHAR(20);
DECLARE update_qry VARCHAR(200);
SET p = 1;

    WHILE p < 100 DO
        -- set up column name
        IF p <= 9 
            THEN SET str = CONCAT('i0', p);
            ELSE SET str = CONCAT('i', p);
        END IF;
        -- set up query to execute
        SET update_qry = CONCAT("UPDATE target_table SET `", str, "` = replace(", str, ", '1', '-1');")
        -- prepare execute and deallocate query
        PREPARE qry FROM update_qry;
        EXECUTE qry;
        DEALLOCATE PREPARE qry;
        -- increment counter for next column name
        SET p = p + 1; 
    END WHILE; 
END$$