我设置了一个带有列名的临时变量:
SET @col_name:='my_column_name';
现在我想@col_name
在查询中用作列名。
UPDATE my_table SET @col_name='my new value';
但这给了我错误。
ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '@col_name='my new value'' 附近使用正确的语法
我设置了一个带有列名的临时变量:
SET @col_name:='my_column_name';
现在我想@col_name
在查询中用作列名。
UPDATE my_table SET @col_name='my new value';
但这给了我错误。
ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '@col_name='my new value'' 附近使用正确的语法
准备语句的小技巧,几乎一切皆有可能;)
SET @col_name:='my_column_name';
SET @s = CONCAT('UPDATE my_table SET ',@col_name,'="my new value";');
PREPARE stmt FROM @s;
EXECUTE stmt;
您不能在需要名称的地方使用变量,只能在允许使用表达式的地方使用。这是一种实现您想要的方法:
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 的回答。