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。
计划构建一个将执行创建视图语句的动态 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。