-2

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

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'' 附近使用正确的语法

4

2 回答 2

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;
于 2013-05-30T16:37:55.653 回答
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 的回答。

于 2013-05-30T16:38:04.123 回答