我有一个sh脚本,连接到mysql并尝试执行保存在本地文件中的存储过程。
tblName="table${k}"
mysql -h 10.0.0.1 --user=username --password=password
-e "use db_test; set @tableName=${tblName}; source query.sql;"
和文件query.sql:
set @str = concat('create table ', @tableName, ' (
id int not null,
....
);');
prepare stmt from @str;
execute stmt;
deallocate prepare stmt;
mysql命令在for循环中;k〃;是一个索引。我想创建一个名称取自tableName变量的表。问题是我收到一个错误:
ERROR 1054 (42S22) at line 1: Unknown column 'table1' in 'field list'
ERROR 1054 (42S22) at line 1: Unknown column 'table2' in 'field list'
ERROR 1054 (42S22) at line 1: Unknown column 'table3' in 'field list'
...
我有点困惑,因为";表1";是表名,而不是列。我做错了什么?我发现了很多使用这种方法的例子,但我不知道为什么它不起作用。
命令:
set @tableName=${tblName}
要求表名包含在"中。
修复do:
set @tableName='${tblName}'
在MySQL shell中测试显示了问题:
mysql> set @tableName=table1;
ERROR 1054 (42S22): Unknown column 'table1' in 'field list'
mysql> set @tableName='table1';
Query OK, 0 rows affected (0.00 sec)
mysql>