MySQL变量存储数据库名称

3

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

我想要做的是像这样:

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个回答

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;

我还没有测试你的解决方案。我不得不继续前进,并以迄今为止相同的方式解决了它。等我测试过后再回来。 - Max Kielland

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