Я пытался написать хранимую процедуру, в которой пользователь вводит в столбец, в котором он sh, данные для хранения, а затем данные для хранения. Пока это работает, но столбец жестко запрограммирован.
CREATE PROCEDURE `cnp_data`.`AddBehavior` (IN StudId INT,
IN ColumnData VARCHAR(45))
BEGIN
UPDATE `Behavior`
SET `Lunch` = ColumnData
WHERE `StudentId`=StudId;
END
Но я хочу сделать так, чтобы столбец Lunch
мог быть динамически установлен пользователем. До сих пор я застрял с этим:
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
CALL AddBehavior(19, "AM Snack", "test");
Код ошибки: 1054. Неизвестный столбец 'test' в 'списке полей'
Я не понимаю, почему он пытается найти @ Var3 в качестве столбца, а не устанавливать его в качестве данных внутри столбца @ Var2.
Спасибо всем за помощь или советы!