Переменные MySQL, хранящие имя базы данных - PullRequest
2 голосов
/ 03 апреля 2011

У меня есть длинный скрипт, который мне нужно запустить в нескольких разных базах данных (все с одинаковыми таблицами и именами полей).

Я хотел бы сделать что-то вроде этого:

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; проверьте правильность синтаксиса в строке, близкой к @TABLE, в руководстве, соответствующем вашей версии сервера MySQL, в строке ... "Как видите, строка 10 работает нормально ...

Можно ли ссылаться на таблицу в базе данных с переменной?

// Спасибо.

1 Ответ

2 голосов
/ 03 апреля 2011

Это будет работать, если вы объедините весь запрос.Попробуйте:

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;
...