2013-02-21 29 views
0

我试图重命名使用定义为@var恒定的前缀表的列表:MySQL的原始查询:使用@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 

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

+0

什么是errror消息? – Lars 2013-02-21 11:13:18

+0

其中:“您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,在第1行”select CONCAT(@p,'tablename1')'附近使用正确的语法“ – mikkelbreum 2013-02-21 11:15:45

回答

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; 
+0

谢谢,我需要什么。 – mikkelbreum 2013-02-21 11:46:11