在存储过程中使用变量作为列名

时间:2019-04-08 00:41:13

标签: mysql-workbench

DELIMITER //
DROP PROCEDURE IF EXISTS `update_player`;
CREATE PROCEDURE `update_player`(p CHAR(50), t CHAR(3), stat CHAR(20), num INT)
BEGIN
SET @p = p;
SET @t = t;
SET @stat = stat;
SET @num = num;
SET @pc = CONCAT(
'SET SQL_SAFE_UPDATES=0;
UPDATE players
SET ', @stat, ' = (', @stat, ' + ', @num, ')
WHERE player_name = ''', @p, ''' AND Tm = ''', @t, ''';
SET SQL_SAFE_UPDATES=1;');
PREPARE stmt1 FROM @pc;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END;
//

CALL update_player('Alex Abrines','OKC','PTS',10);

我目前正在建立一个数据库,以跟踪一些NBA统计数据。我正在尝试通过将要更新的列作为变量来更新球员的特定统计数据。当我尝试运行此命令时,我会得到

  

“错误代码:1064。您的SQL语法有错误;请检查   与您的MySQL服务器版本相对应的手册   'UPDATE player SET PTS =(PTS + 10)WHERE附近使用的语法   player_name ='Alex Abrines'AND Tm ='第2行。”

我用这些值对这个查询进行了硬编码,并且可以正常工作。因此,我认为问题在于变量数据类型的兼容性。感谢您的任何帮助。

0 个答案:

没有答案