存储数据库名称的 MySQL 变量

标签 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 行工作正常...

有什么方法可以用变量引用数据库中的表吗?

//谢谢。

最佳答案

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

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;

关于存储数据库名称的 MySQL 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5530755/

相关文章:

MySQL,文本索引不起作用

PHP mysql添加行错误

JavaScript:在构造函数中使用原型(prototype)函数更改变量

c++ - 接收错误变量的类型不完整 "void"

ruby-on-rails - mongoid、set_table_name 和 attr_accessible

LINQ 从动态表名字符串中选择

php - 在 PHP 中将包含空字节的字符串(PNG 图像)写入 MySQL

mysql - 从我的表格中选择日期 = 特定日期

javascript - 如何覆盖javascript变量?

c# - Entity Framework Core RC2 表名复数化