MySQL изменить базу данных со значением переменной - PullRequest
5 голосов
/ 29 марта 2012

Я устанавливаю переменную, а затем хочу использовать команду USE для изменения базы данных.К сожалению, USE не оценивает переменную.

SET @con="testDB";
Query OK, 0 rows affected (0.00 sec)
select @con;
+--------+
| @con   |
+--------+
| testDB |
+--------+
1 row in set (0.00 sec)
use @con;
ERROR 1049 (42000): Unknown database '@con'

Таким образом, значение переменной не оценивается, когда я пытаюсь подключиться.Есть идеи?

Ответы [ 2 ]

8 голосов
/ 29 марта 2012

Я нашел свое собственное решение, поэтому я собираюсь ответить на свой вопрос, на случай, если кому-то будет интересно.

@ Если вы правы, использовать команду с переменной USE.

невозможно.

Однако из-за того, что я хочу создать таблицу в базе данных, указанной во время выполнения, мое решение будет заключаться в использовании динамического SQL:

set @schema="testDB";
set @front="CREATE TABLE IF NOT EXISTS ";
set @endpart=".`TEST1` (DIM_ID INT(16)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;";
set @stat=concat(@front,@schema,@endpart);
prepare command from @stat;
execute command;

Таким образом, в основном это решение создает оператор, подготавливает и выполняет его. Параметр @schema можно даже вставить в скрипт. Таким образом, я динамически создаю оператор create.

0 голосов
/ 11 марта 2016

Я не думаю, что можно каким-то образом USE @var;.Но в некоторых случаях это можно сделать наоборот.

USE testDB;
SET @schema = DATABASE();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...