使用变量作为表名创建表 (MySQL 5.1)

16

我正在尝试创建一个以当前年份和月份命名的表格(2011-09),但是MySQL似乎不喜欢这样做。

SET @yyyy_mm=Year(NOW())+'-'+Month(NOW());
CREATE TABLE `survey`.`@yyyy_mm` LIKE `survey`.`interim`;
SHOW TABLES IN `survey`;

+-----------+
| interim   |
+-----------+
| @yyyy_mm  |
+-----------+
如果我使用CREATE TABLE;而没有在@yyyy_mm周围加上引号,则会出现通用的语法错误。 @yyyy_mm解析为2020

标识符不是变量,变量也不是标识符。这需要使用“动态SQL”——在我所使用的所有数据库中都很棘手。 - user166390
请参考以下链接:https://dev59.com/7HVC5IYBdhLWcg3ww0Hr,http://stackoverflow.com/questions/929244/mysql-create-table-with-dynamic-database-name和https://dev59.com/51XTa4cB1Zd3GeqP5did。 - user166390
2个回答

35
你应该能够像这样做:

SET @yyyy_mm=DATE_FORMAT(now(),'%Y-%m');
SET @c = CONCAT('CREATE TABLE `survey`.`',@yyyy_mm, '` LIKE `survey`.`interim`');
PREPARE stmt from @c;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

8
set @yyyy_mm=concat(year(now()),'-',month(now()));
set @str = concat('create table survery.`', @yyyy_mm,'` like survey.interim;');
prepare stmt from @str;
execute stmt;
deallocate prepare stmt;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接