如何根据变量选择架构?

Bil*_*eal 11 mysql sql

考虑:

SET @PREFIX='DEV_';

SET @REFRESHDB=CONCAT(@PREFIX,'Refresh');

CREATE TABLE @REFRESHDB.`Metadata`
(
    `Key` VARCHAR(30) NOT NULL,
    `Value` VARCHAR(30) NOT NULL,
    PRIMARY KEY (`Key`)
) ENGINE = InnoDB;

INSERT INTO @REFRESDB.`Metadata` (`Key`, `Value`) VALUES ("Version", "0");
Run Code Online (Sandbox Code Playgroud)

这似乎没有效果:mysql回来了:

您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在'@REFRESHDB .Metadata`附近使用正确的语法

据我所知,根据文档,我已经完成了正确的事情.然而MySQL表示不允许这样做.这是MySQL的一些限制(不允许使用变量作为标识符)或其他什么?

Abe*_*ler 8

您将不得不使用prepare语句/动态SQL来执行此操作.

本文详细介绍了这两个方面:

http://rpbouman.blogspot.com/2005/11/mysql-5-prepared-statement-syntax-and.html

试试这个:

SET @PREFIX='DEV_';

SET @REFRESHDB=CONCAT(@PREFIX,'Refresh');

SET @st = CONCAT('CREATE TABLE ', @REFRESHDB,'.`Metadata`
(
    `Key` VARCHAR(30) NOT NULL,
    `Value` VARCHAR(30) NOT NULL,
    PRIMARY KEY (`Key`)
) ENGINE = InnoDB');

PREPARE tStmt FROM @s;
EXECUTE tStmt;


SET @s = CONCAT('INSERT INTO ', @PREFIX, '.`Metadata` (`Key`, `Value`) VALUES ("Version", "0")');

PREPARE stmt FROM @s;
EXECUTE stmt;
Run Code Online (Sandbox Code Playgroud)


Jer*_*acs 5

文件指出:

“可以为用户变量分配一组有限数据类型的值:整数、小数、浮点、二进制或非二进制字符串,或者 NULL 值”

您正在尝试将该变量用作对象。不支持此操作。