MYSQL 存储过程内用存储过程的参数作表名查找

在MySQL存储过程(stored procedure)中,用参数传入的表名要用于SQL语句中,参考了多个资料,例如:

似乎都不可行,也许是MySQL版本问题。

所有文章的解决方案都是在存储过程中使用prepared statement,但是问题是:在MySQL命令行客户端输入prepared statement时,用?代表将在运行期间替代的内容,但是,在存储过程中是否允许使用问号?

经过在MySQL 5.0环境中测试,在存储过程中和在命令行环境下,prepared statement的用法是有些区别的,在存储过程中,使用问号似乎是多余的,帖子mysql存储过程使用接收到的参数做表名的问题的2楼回帖给了一个例子,直接用CONCAT函数构造出待执行的SQL语句,不用语句

   EXECUTE stmt USING @tableName;

给prepared statement传入参数替代问号。

正如Stored Procedures in MySQL 5.0所说,在存储过程中使用prepared statement使用存储过程参数传来的表名或字段名就像一种trick,跟原来的用于命令行终端的prepared statement的意义已经大不相同。另外还要注意:

   Note that a literal string expression or a user variable are the only ways
   you can specify the statement to be prepared. You cannot prepare a statement
   using an expression