0

我正在尝试使用定义为@var 的常量前缀重命名表列表:

SET @p='newprefix_';
RENAME TABLE `oldprefix_tablename1` TO CONCAT(@p, 'tablename1');
RENAME TABLE `oldprefix_tablename2` TO CONCAT(@p, 'tablename2');

这种语法是错误的,但我看到:

SELECT  CONCAT(@p, 'tablename'); //outputs newprefix_tablename

在这里使用的正确方法/语法是什么?

4

1 回答 1

2

您不能按照您尝试的方式直接执行此操作。正如手册所说(http://dev.mysql.com/doc/refman/5.1/en/user-variables.html

用户变量旨在提供数据值。它们不能直接在 SQL 语句中用作标识符或标识符的一部分,例如在需要表或数据库名称的上下文中,或用作保留字(如 SELECT)。

您必须使用准备好的语句:

SET @p = 'newprefix_';
SET @s = CONCAT('RENAME TABLE `oldprefix_tablename1` to ', @p, 'tablename1');
PREPARE stmt FROM @s;
EXECUTE stmt;
于 2013-02-21T11:20:07.950 回答