在mysql查询中使用临时变量作为列名

时间:2013-05-30 16:21:29

标签: mysql mysql-error-1064

我设置了一个带有列名的临时变量:

SET @col_name:='my_column_name';

现在我想在查询中使用@col_name作为列名。

UPDATE my_table SET @col_name='my new value';

但是这给了我错误。

错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便在第1行使用“@ col_name ='我的新值”附近使用正确的语法

2 个答案:

答案 0 :(得分:2)

使用prepare statements的小技巧,几乎所有事情都是可能的;)

SET @col_name:='my_column_name';
SET @s = CONCAT('UPDATE my_table SET ',@col_name,'="my new value";');
PREPARE stmt FROM @s;
EXECUTE stmt;

答案 1 :(得分:1)

只有在允许表达式的情况下,才能使用需要名称的变量。这是实现目标的方法:

UPDATE my_table
SET col1 = IF(@col_name = 'col1', 'my new value', col1),
    col2 = IF(@col_name = 'col2', 'my new value', col2),
    col3 = IF(@col_name = 'col3', 'my new value', col3),
    ...

另一种选择是动态SQL生成,就像Ochi的回答一样。