mySQL 8 上的动态 SQL

Dynamic SQL on mySQL 8

计划构建一个将执行创建视图语句的动态 sql。我们有多个服务器,但所有服务器的模式都相同。

我从以下开始,

set @businessId = 'buName-1234.';
SET @table_name:= concat(@businessId,'Test');
SELECT @table_name;
SET @sql:=CONCAT('SELECT * FROM ',@table_name);
SELECT @sql;

输出为

SELECT * FROM buName-1234.Test

问题出现在执行部分,

PREPARE dynamic_statement FROM @sql;
EXECUTE dynamic_statement;
DEALLOCATE PREPARE dynamic_statement;

错误是,

错误代码:1064。您的 SQL 语法有误;查看与您的 MySQL 服务器版本相对应的手册,了解在第 1[=18 行的 '-1234.Test' 附近使用的正确语法=]

我曾尝试将单引号 set @businessId = 'buName-1234.'; 更改为反引号,但同样失败并出现错误,

Error Code: 1054. Unknown column 'buName-1234.' in 'field list'

无法在 dbfiddle

上复制错误

在我的例子中,将反引号连接到服务器名称是这样做的方法,就像这样,

SET @databaseName= 'buName-1234';
SET @table = 'Test';
SET @fullTable_name:= concat("`",@databaseName,"`.",@table);
SET @sql:= CONCAT('SELECT * FROM ',@fullTable_name,";");
SELECT @sql

输出为

 SELECT * FROM `buName-1234`.Test;

可用于 PREPARE & EXECUTE。