mysql - 重命名 SQL 中的数据库表错误

标签 mysql dynamic-sql

我正在尝试使用此处给出的答案重命名我的数据库表:

How To have Dynamic SQL in MySQL Stored Procedure

但是当我尝试在 phpMyAdmin SQL 选项卡中运行以下命令时,出现 SQL 错误:

delimiter // 
CREATE PROCEDURE dynamic(IN tbl CHAR(64), IN col CHAR(64))
BEGIN
    SET @s = CONCAT('SELECT 'RENAME TABLE ', 
             GROUP_CONCAT('', TABLE_SCHEMA, ''.'', TABLE_NAME,
             ' TO ', TABLE_SCHEMA, ''='.osx_''', TABLE_NAME, '')) AS q
             FROM 
             information_schema.Tables WHERE TABLE_SCHEMA='my_database'';;'
    PREPARE stmt FROM @s;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END
//
delimiter ;

错误如下:

#1064 - You have an error in your SQL syntax;  
check the manual that corresponds to your MySQL  
server version for the right syntax to use near  
'RENAME TABLE ', GROUP_CONCAT('', TABLE_SCHEMA, ''.'', TABLE_NAME,' at line 3

我没有看到错误,有人能发现它吗?

--编辑--

查看 Max 的答案后,我使用反引号重新格式化了查询:

CREATE PROCEDURE dynamic(IN tbl CHAR(64), IN col CHAR(64))
BEGIN
    SET @s = SELECT
             CONCAT('RENAME TABLE ', 
             GROUP_CONCAT('`', TABLE_SCHEMA, '`.`', TABLE_NAME, 
             '` TO `', TABLE_SCHEMA, '`.`osx_', TABLE_NAME, '`')) AS q
             FROM 
             `information_schema`.`Tables` WHERE TABLE_SCHEMA=`my_database`;
    PREPARE stmt FROM @s;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END

从我发现的另一个示例(见下文)中,我仍然收到 sql 错误:

#1064 - You have an error in your SQL syntax; check the manual 
that corresponds to your MySQL server version for the right 
syntax to use near 'SELECT
             CONCAT('RENAME TABLE ', 
             GROUP_CONCAT('`', TABLE_SCHEMA, '`.`',' at line 3 

我还尝试了另一个例子:

SELECT 
    CONCAT('RENAME TABLE ', 
    GROUP_CONCAT('`', TABLE_SCHEMA, '`.`', TABLE_NAME, 
    '` TO `', TABLE_SCHEMA, '`.`osx_', TABLE_NAME, '`')) AS q
FROM 
    `information_schema`.`Tables` WHERE TABLE_SCHEMA='my_database';

这会执行但会产生以下警告:

This table does not contain a unique column. 
Grid edit, checkbox, Edit, Copy and Delete features are not available.

并且不会对数据库执行任何操作。

救命!

最佳答案

'SELECT 'RENAME

您已使用单引号打开 CONCAT() 参数,当 MySQL 看到另一个参数时,它需要下一个参数。
您可以转义引号或对字符串文字使用双引号。

CONCAT('SELECT "RENAME TABLE ", GROUP_CONCAT( ...

关于mysql - 重命名 SQL 中的数据库表错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20831344/

相关文章:

mysql - 在 JBoss 启动时填充 hibernate/jpa MySql 数据源

mysql - SQL有没有办法链接两个值相同但格式不同的表?

sql-server - 使用动态 T-SQL 将数据类型 nvarchar 转换为 float 时出错

sql - select 语句中的动态表名

java - 用Java动态组装SQL查询

sql - SQL Server 2000 中的动态交叉表

mysql - 如何使用 JRuby 覆盖 ActiveRecord::Type::Boolean

android - SQLite 错误 - 滥用聚合 : sum()

java - 上传项目数据库到jazzhub

postgresql - 从通用触发器中的不同列获取值