mySQL使用使用动态列名的过程更新行

mySQL使用使用动态列名的过程更新行,mysql,stored-procedures,dynamic-columns,mysql-variables,Mysql,Stored Procedures,Dynamic Columns,Mysql Variables,我一直在尝试编写一个存储过程,其中包括用户在希望存储数据的列中输入数据,然后输入要存储的数据。到目前为止,这是可行的,但列是硬编码的 CREATE PROCEDURE `cnp_data`.`AddBehavior` (IN StudId INT, IN ColumnData VARCHAR(45)) BEGIN UPDATE `Behavior` SET `Lunch` = Colum

我一直在尝试编写一个存储过程,其中包括用户在希望存储数据的列中输入数据,然后输入要存储的数据。到目前为止,这是可行的,但列是硬编码的

CREATE PROCEDURE `cnp_data`.`AddBehavior` (IN StudId INT,
                                           IN ColumnData VARCHAR(45))
BEGIN
    UPDATE `Behavior`
        SET `Lunch` = ColumnData                        
            WHERE `StudentId`=StudId;
END
但是我想让用户可以动态地设置
午餐
列。到目前为止,我一直坚持这一点:

CREATE PROCEDURE `cnp_data`.`AddBehavior` (IN StudId INT,
                                           IN ColumnName VARCHAR(45),
                                           IN ColumnData VARCHAR(45))
BEGIN
    SET @Var1=StudId;
    SET @Var2=ColumnName;
    SET @Var3=ColumnData;
    SET @sqlstm = CONCAT("UPDATE `Behavior`
                            SET `",@Var2,"` = ",@Var3,"
                               WHERE `StudentId`= ",@Var1,";");
    PREPARE stmt FROM @sqlstm;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END
但是当我尝试输入下面的CALL语句时,这会抛出一个错误

调用AddBehavior(19,“AM零食”、“测试”)

错误代码:1054。“字段列表”中的未知列“测试”

我不明白为什么它试图将@Var3作为列来查找,而不是将其设置为@Var2列中的数据


谢谢大家的帮助和见解

这很有效,谢谢安东尼·麦格拉斯

CREATE PROCEDURE `cnp_data`.`AddBehavior` (IN StudId INT,
                                           IN ColumnName VARCHAR(45),
                                           IN ColumnChoice VARCHAR(45))
BEGIN
    SET @Var1=StudId;
    SET @Var2=ColumnName;
    SET @Var3=ColumnChoice;
    SET @Var4=CURRENT_DATE;
    SET @sqlstm = CONCAT("UPDATE `Behavior`
        SET `",@Var2,"` = """,@Var3,"""
            WHERE `StudentId`= ",@Var1," AND CurrentDate=""",@Var4,""";");
    PREPARE stmt FROM @sqlstm;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END

尝试添加“周围的字符”@Var3,“非常感谢,这很有效。我已经挣扎了太久,我不能相信这是一个简单的报价错误。非常感谢。不客气。很高兴它修好了!