我设置了一个带有列名的临时变量:
SET @col_name:='my_column_name';
现在我想在查询中使用@col_name
作为列名。
UPDATE my_table SET @col_name='my new value';
但是这给了我错误。
错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便在第1行使用“@ col_name ='我的新值”附近使用正确的语法
答案 0 :(得分:2)
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的回答一样。