MySQL变量存储数据库名称

时间:2011-04-03 16:12:09

标签: mysql variables tablename

我有一个很长的脚本,我需要在几个不同的数据库上运行(所有数据库都有相同的表和字段名称)。

我想做的是这样的事情:

1  SET @TARGET_DATABASE = 'beta'
2  SET @SOURCE_DATABASE = 'sandbox';
3  
4  CREATE DATABASE IF NOT EXISTS @TARGET_DATABASE;
5  USE @TARGET_DATABASE;

...

10 INSERT INTO `tableFoo` SELECT * FROM @SOURCE_DATABASE.`tableFoo`;

在第10行我得到一个错误(我并不感到惊讶):“脚本行:10你的SQL语法有错误;查看与你的MySQL服务器版本相对应的手册,以便在附近使用正确的语法' @ SOURCE_DATABASE。tableFoo'在线...“

所以我尝试了第10行:

10 SET @TABLE=CONCAT('`',@SOURCE_DATABASE,'`','.`tableFoo`');
11 INSERT INTO `tableFoo` SELECT * FROM @TABLE;

...并再次出现错误“脚本行:11您的SQL语法出错;请查看与您的MySQL服务器版本对应的手册,以便在'@TABLE'附近使用正确的语法...”如您所见,第10行工作正常......

有没有办法用变量引用数据库中的表?

//谢谢。

1 个答案:

答案 0 :(得分:2)

如果您连接整个查询,它将起作用。尝试:

set @db = 'mydb';
set @tble = 'table';

set @query = concat('INSERT INTO tablefoo SELECT * FROM ', @db, '.', @tble);
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;